多数元素

题目: 给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例:
示例 1:

输入: [3,2,3]
输出: 3

示例 2:

输入: [2,2,1,1,1,2,2]
输出: 2

思路1: 排序找中间的值。
在这里插入图片描述
通过上图的分析,我们可以发现不管是数组元素个数是奇数还是偶数,次数大于n/2的元素都会在n/2位置上。所以代码如下:
代码1:

int majorityElement1(vector<int>& nums)
{
	sort(nums.begin(),nums.end());
	return nums[nums.size()/2];
}

思路2: 保存数组每个元素出现的次数,最后判断出现次数是否大于n/2即可。用哈希和数组都可以。我们用unordered_map<int,int>hash来记录。
代码2:

int majorityElement2(vector<int>& nums)
 {
	 unordered_map<int,int> record;
	 for(int i=0;i<nums.size();i++)
	 {
		 record[nums[i]]++;
		 if(record[nums[i]]>nums.size()/2)
		 {
			 return nums[i];
		 }
	 }
	 return -1;
 }

思路3: 投票法:和我一样的加1,不一样的减一,当票数<0则换下一个,最后留下来的就是众数,如下图举例:
在这里插入图片描述
代码:

int majorityElement (vector<int>& nums)
 {
	 int cand=nums[0];
	 int count=1;
	 for(int i=1;i<nums.size();i++)
	 {
		 if(nums[i]==cand)
		 {
			 count++;
		 }
		 else if(--count<0)
		 { 
			 cand=nums[i];
			 count=1;
		 }
		
	 }
	 return cand;

 }

加油哦!🍰。

发布了54 篇原创文章 · 获赞 8 · 访问量 5335
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览