59 分类: Leetcode,算法

169.多数元素

给定一个大小为 n的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

示例 1:

**输入:** nums = [3,2,3]
**输出:** 3

示例 2:

**输入:** nums = [2,2,1,1,1,2,2]
**输出:** 2

提示:

  • n == nums.length
  • 1 <= n <= 5 * 104
  • -109 <= nums[i] <= 109

进阶: 尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。

思路:投票算法,两两消去,最后肯定剩下众数

class Solution {
    public int majorityElement(int[] nums) {
        int ans=nums[0],volt=0;
        for(int i=0;i<nums.length;i++){
            if(volt==0){
                ans=nums[i];
            }
            if(ans==nums[i])
                volt++;
            else
                volt--;
        }
        return ans;
    }
}

方法2:分治算法。分到数组长度为1,则直接返回,否则接着递归,得到左区间的值和右区间的值,如果左右区间值相同则返回,不同则在左右对应区间内统计左值和右值的数量,决定返回哪个值

#none

作者: zyk的zone

版权: 除特别声明,均采用BY-NC-SA 4.0许可协议,转载请表明出处

目录Content

-->