摩尔投票法-求数组中多数元素

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
看到这道题的时候,我首先想到的是数组排序,返回中间元素就是多数元素:

  Arrays.sort(nums);
  return nums[nums.length/2];

简单快捷,不过依靠的是API,提升不了算法能力。
所以学习到新的算法—摩尔投票算法

  1. 先找算法第一个元素nums[0]作为多数元素majority,count计为1,继续扫描数组,
  2. 如果下一个元素值与num[0]相等,count+1;如果不相等,count-1;
  3. 直到count==0,将当下扫描的元素设置为多数元素majority,继续对比进行count的加减。
  4. 数组扫描结束,返回majority。
    在线性时间和空间内就完成了多数元素的查找。
        int count=1;
		int e=nums[0];
		for(int i=1;i<nums.length;i++){
     
			if(e==nums[i])
				count++;
			else if(count!=0){
     
				count--;
			}
			else if(count==0)
				e=nums[i];
		}
		return e;

撒花

你可能感兴趣的:(代码,算法)