Majority Element
来源:互联网 发布:淘宝分销模式解说 编辑:程序博客网 时间:2024/06/03 22:57
Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.(给定一个大小为n的数组,找出majority element,majority element是指在数组中出现超过n/2次的元素)
You may assume that the array is non-empty and the majority element always exist in the array.(假设数组是非空的,并且majority element总是存在的)
1.个人分析
思路:
(1)从头到尾遍历数组,统计每个不同元素在数组中的个数,找出个数大于n/2的元素。
(2)先将数组进行排序,显然排序后的数组中相同元素都相邻排列,然后统计不同元素的个数,最后找出个数大于n/2的元素。
2.个人解法
int majorityElement(vector<int>& nums) { int counterLen = nums.size(); int *counter = new int[counterLen]; for(int i=0; i<counterLen; ++i) counter[i] = 0; int key; for (int i=0; i<counterLen; ++i) { key = nums[i] % counterLen; if(key < 0) key += counterLen; ++counter[key] ; if(counter[key] > (counterLen/2)) return nums[i]; } return -1;}
结果显示能够通过所有测试用例,时间和空间复杂度都为O(n),只不过这里要注意当进行哈希散列过程中key为负数的情况,教材给出的处理方法是key=key + tableSize。
3.参考解法
(1)
int majorityElement(vector<int>& nums) { int winner = 0; for (int i=0; i<32; i++) { int ones = 0; for (int n : nums) ones += (n >> i) & 1; winner += (ones > nums.size() / 2) << i; } return winner;}
这种解法涉及到位运算
(2)
int majorityElement(int[] num) { int major=num[0], count = 1; for(int i=1; i<num.length;i++){ if(count==0){ count++; major=num[i]; }else if(major==num[i]){ count++; }else count--; } return major; }
上面解法是Java实现的,可能是所有方法里最快的,记得该方法是来源自一篇学术论文中的成果,但是自己还不理解其实现的原理。
4.总结
看了这道题其他人给出的各种解法后,发现算法的水非常深,只有你想不到,没有实现不了更快更简洁的方法。
PS:
- 题目的中文翻译是本人所作,如有偏差敬请指正。
- 其中的“个人分析”和“个人解法”均是本人最初的想法和做法,不一定是对的,只是作为一个对照和记录。
0 0
- majority element
- Majority Element
- Majority Element
- Majority Element
- Majority Element
- Majority Element
- Majority Element
- Majority Element
- Majority Element
- Majority Element
- Majority Element
- Majority Element
- Majority Element
- Majority Element
- Majority Element
- majority element
- Majority Element
- Majority Element
- 记录一个decimal格式转换出现的问题
- 浅析 - Android ContentProvider用法示例
- 前端基础——CSS常见样式
- Android SensorService启动流程(一)
- CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡
- Majority Element
- OpenNI2 开发者指南
- oracle优化
- xib 修改约束,参数没反应
- 如何查看linux版本 如何查看LINUX是多少位
- 关于fedora24安装matlab问题
- UILable的一些很有用的功能
- 对LeNet-5卷积神经网络的理解
- ADB 的一些命令,不定期更新