数组中出现次数超过一半的数字 java

    科技2022-07-10  108

    题目要求

    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。

    假设数组非空,并且一定存在满足条件的数字。

    思考题:

    假设要求只能使用 O(n) 的时间和额外 O(1) 的空间,该怎么做呢? 样例 输入:[1,2,1,1,3]

    输出:1

    解题思路

    public int moreThanHalfNum_Solution(int[] nums) { int con=0,val=nums[0]; for(int i=0; i<nums.length; i++) { if(nums[i]==val) con++; else{ con--; if(con==-1) { val=nums[i]; con=1; } } } return val; }

    为什么最后的val就是答案呢?

    我们使用反证法,假设val 不是超过一般的数字那么不等于他的值的个数肯定超过他,也就是说它对应的个数con肯定会被减到-1。所有val就是最后的答案。 思路很抽象建议自己写几个数组按照代码的思路,走几遍。

    Processed: 0.014, SQL: 8