标签:
给定一组数,有一个数在这组数里的出现次数超过n/2次。
求出这是哪个数
https://leetcode.com/problems/majority-element/
一开始考虑的方是将所有数转化为二进制,那么对于这些二进制数来说。
其每一位上必然是出现次数最多的数决定了它是1还是0。
例如,将每个二进制数的最低位加起来,得到一个sum。
那么如果sum/nums.length大于0.5那么这个majority number在最低位必然是1
反之必然为0。这样就可以把所有的位置求出来。AC了
但是网上查到了一个更好的解法。
即,每出现一对不同的数,就删除它,那么到最后剩下的那个数必然是所求的数。
网上给出的代码也极为精巧
1 public int majorityElement(int[] nums) { 2 int count = 0, candidate = -1; 3 for (int i = 0; i < nums.length; i++) { 4 if (count == 0) { 5 candidate = nums[i]; 6 count = 1; 7 } else if (candidate == nums[i]) { 8 count++; 9 } else { 10 count--; 11 } 12 } 13 return candidate; 14 }
标签:
原文地址:http://www.cnblogs.com/elnino/p/5626241.html