剑指offer:数组中出现次数超过一半的数字

来源:互联网 发布:国内人脸数据库 编辑:程序博客网 时间:2024/06/08 08:01

题目描述

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。

方法1:普通的遍历

【运行时间:14ms 占用内存:8276k】

public class Solution {     public int MoreThanHalfNum_Solution(int [] array) {        int length=array.length/2;        int count=1;        int value=0;            if(array.length==1) return array[0];         for(int i=0;i<array.length;i++){             for(int j=i+1;j<array.length;j++){                 if(array[i]==array[j]){                     count++;                     if(count>length){                         value=array[i];                         return value;                     }                 }             }             count=1;         }         return 0;    }}

方法2:数组的中位数值

【运行时间:13ms  占用内存:8408k】

import java.util.*;public class Solution {    public int MoreThanHalfNum_Solution(int [] array) {        if(array==null||array.length==0)return 0;        int len=array.length;        Arrays.sort(array);        int number=array[len/2];        int count=0;        for(int i=0;i<array.length;i++){            if(number==array[i])                count++;        }        if(count<=len/2){            return 0;        }        return number;    }}



阅读全文
0 0