lintcode: Majority Number
2016-02-24 10:31
351 查看
Given an array of integers, the majority number is the number that
occurs more than half of the size of the array. Find it.
Example
Given [1, 1, 1, 1, 2, 2, 2], return 1
Challenge
O(n) time and O(1) extra space
记录一个candidate和其出现的次数count,遍历每个数,如果count==0,则把candidate置为遍历到的数,否则看遍历到的数和candidate是否相等,如果相等,则count++,否则count–(抵消),遍历结束后,candidate就是主元素。
这个方法在assume存在majority number的时候是成立的,如果没有这个前提,则要再loop一次找到这个数出现的次数是否确实大于一半
occurs more than half of the size of the array. Find it.
Example
Given [1, 1, 1, 1, 2, 2, 2], return 1
Challenge
O(n) time and O(1) extra space
记录一个candidate和其出现的次数count,遍历每个数,如果count==0,则把candidate置为遍历到的数,否则看遍历到的数和candidate是否相等,如果相等,则count++,否则count–(抵消),遍历结束后,candidate就是主元素。
这个方法在assume存在majority number的时候是成立的,如果没有这个前提,则要再loop一次找到这个数出现的次数是否确实大于一半
class Solution { public: /** * @param nums: A list of integers * @return: The majority number */ int majorityNumber(vector<int> nums) { // write your code here int len=nums.size(); if(len==1){ return nums[0]; } int cnt=1; int index_res=0; for(int i=1;i<nums.size();i++){ if(nums[i]==nums[index_res]){ cnt++; }else{ cnt--; } if(cnt==0){ cnt=1; index_res=i; } } return nums[index_res]; } };
相关文章推荐
- 喜欢的名言警句
- 码农十年总结
- mysql 存储过程
- C# default(T)
- Git用法之Git基础(上)
- 光标移动大法。。。 来自落落大神
- YUV分析
- android部分控件属性摘抄
- TBSchedule原理与实践
- eclipse快捷键
- 《Linux历史记录数控制及隶属记录数文件控制》
- Codeforces Round #156 (Div. 2)---A. Greg's Workout
- 设置DIV根据内容自动调整高度的三个方法
- 如果在grid用户下不能启动 crs
- 大牛公司机构近期研究报告大合集
- 2月份中国域名商解析量17强:易名亚军 增势强劲
- 为什么要对NSLog打印进行重写,用MyLog替代NSLog
- C Runtime Library
- Android保存图片到系统图库并通知系统相册刷新
- virtual与多态