码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode majority number

时间:2016-06-29 13:14:04      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:

给定一组数,有一个数在这组数里的出现次数超过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     }

 

leetcode majority number

标签:

原文地址:http://www.cnblogs.com/elnino/p/5626241.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!