题解 | #数组中出现次数超过一半的数字#
数组中出现次数超过一半的数字
http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163
写完看评论去才发现没用上过半的条件,做的麻烦了。其实差不多,两种方法如下:
class Solution { public: int MoreThanHalfNum_Solution(vector<int> numbers) { sort(numbers.begin(),numbers.end()); int number=numbers[0]; int sum=0; int ans=numbers[0]; int max=0; for(int i=0;i<numbers.size();i++){ if(number==numbers[i]) sum++; else { number=numbers[i]; sum=1; } if(max<sum){ ans=number; max=sum; } } return ans; } };
统计次数还可以用map
class Solution { public: int MoreThanHalfNum_Solution(vector<int> numbers) { map<int,int> m; int ans=0; int max=0; for(int i=0;i<numbers.size();i++){ m[numbers[i]]++; ans=max<m[numbers[i]]?numbers[i]:ans; max=max<m[numbers[i]]?m[numbers[i]]:max; } return ans; } };