[剑指offer][Java]数组中出现次数超过一半的数字

题目

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

程序核心思想

  • 我的方法:创建一个辅助数组,使其的长度跟array一致,用来记录array中的元素出现的个数。
    当前数会依次跟之前的数(从0开始扫描array)比较,如果有相同的,那么就使辅助数组中的索引为之前数的值加一,并且跳出循环,如果发现辅助数组中的值大于array长度的一半,那么返回array数组的当前值。

Tips

代码

public class Solution {
    public int MoreThanHalfNum_Solution(int [] array) {
        int length = array.length / 2 + 1;
        int[] arr = new int[array.length];
        for(int i = 0; i < arr.length; i++){
            arr[i] = 0;
        }
        for(int i = 0; i < array.length; i++){
            for(int j = 0; j <= i; j++){
                if(array[i] == array[j]){
                    arr[j]++;
                    if(arr[j] == length)    return array[i];
                    break;
                }
            }
        }
        return 0;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容