[leetcode]Majority Element C语言
来源:互联网 发布:如果黄家驹还活着知乎 编辑:程序博客网 时间:2024/05/19 17:51
【题目】
Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.
You may assume that the array is non-empty and the majority element always exist in the array.
【题目分析】
这道题可以用暴力方法,但是时间会超出,后来想到用hash表映射,在后面网上找到一种叫moore’s voting 算法。算法的大致意思是,每次都找出一对不同的元素,从数组中删掉,直到数组为空或只有一种元素。由于题目中假设不存在没有majority element这种情况,因此直接使用即可,但是如果没有这样的假设,我们还需要在最后得出值后遍历验证一下。这个算法和巧妙哈。代码是自己写的。
【具体代码如下】
int majorityElement(int* nums, int numsSize) { int cnt=0; int i; int val=nums[0]; for(i=0;i<numsSize;i++) { if(val==nums[i]) cnt++; if(val!=nums[i]) { if(cnt>=1) { cnt--; if(cnt==0)val=nums[1+i]; } }} return val;}
【个人总结】在用moore’s voting 算法实现的时候,要注意下在第16行,val=nums[i+1],不能写成val=nums[++i];因为当cnt==0时,说明没有新的参考值,也就是说前面的值已经都被删除完了,那么这个参考值就应该是当前i的后一个值,而不能++i是因为如果++i了,而本身for循环里有i++;则会使得cnt值发生错误,导致结果错误,最好的理解办法就是举一个例子,一句一句一次执行一遍。很经典的一个算法哈。
网上很多代码是用cnt的值作为if的判断条件,而for循环外不对val赋值。
下面附上网上流行的一种经典代码:用c++实现的。
一下的这段代码源于http://www.bubuko.com/infodetail-589281.html
int majorityElement(vector<int> &num){ int curIdx = 0, count = 1; for (int i = 1; i < num.size(); ++i) { num[i] == num[curIdx] ? ++count : --count; if (!count) { curIdx = i; count = 1; } } return num[curIdx];}
代码的比我写的要简洁干练一些。值得学习。
- [leetcode]Majority Element C语言
- [leetcode]C语言:169 Majority Element
- [C语言][LeetCode][169]Majority Element
- [LeetCode练习题-C语言]169. Majority Element
- LeetCode Majority Element (c++)
- [C++]LeetCode: 50 Majority Element
- 169. Majority Element c语言
- [leetcode-229]Majority Element II(c++)
- [leetcode-229]Majority Element II(c)
- LeetCode 169. Majority Element 题解(C++)
- 【LeetCode-229】Majority Element II(C++)
- 【leetcode】Majority Element II,Majority element algorithm
- Leetcode: Majority Element &Majority Element II
- Leetcode Majority Element
- leetcode 169-Majority Element
- 【leetcode 哈希表】Majority Element
- LeetCode:Majority Element
- leetcode:Majority Element
- html 添加视频
- axis webservice调试
- Java内存管理和垃圾回收
- run模式可以启动,debug模式无法启动
- JPA 实体映射
- [leetcode]Majority Element C语言
- POJ 3122 Pie(二分)
- Scheme 语言概要(上)
- CODEVS 1021 玛丽卡 最短路模板题
- 手机淘宝构架演化实践
- uboot 引导kernel杂谈
- 【Qt】QThread::moveToThread
- Scheme 语言概要(下)
- 鼠标马赛克图像部分区域