Leetcode每日一题:169.majority-element(多数元素)

在这里插入图片描述
思路:根据题意,该数组里有且只有一个多数元素,即为个数最多并且个数大于n/2的元素,可以采取这样的策略:从第一个数开始time=1,遇到相同的就加1,遇到不同的就减1,减到0就重新换这个数开始计数,总能找到最多的那个;

可能遇到这种情况想不通:1,2,1,3,1,4 这样会使得结果变为4而不是1吗?
结果肯定还是1,因为一开始res=1,time=1,当经过4时,time明显会–,降低到0,但此时res的值不会变,只有当nums[i]!=res并且time==0的时候才会让res的值发生变化!!! 如果进来的是1,2,1,3,1,4,4;会不会导致res=4呢?也不会,因为这样就不满足多数元素的条件了,数组长度为7,但是没有一个元素达到了n/2次;
在这里插入图片描述

代码如下:

int majorityElement(vector<int> &nums)
{
	int len = nums.size();
	int res = nums[0], time = 1;

	for (int i = 1; i < len; i++)
	{
		if (nums[i] == res)
		{
			time++;
		}
		else if (time != 0)
		{
			time--;
		}
		else
		{
			res=nums[i];
			time++;
		}
	}
	return res;
}

猜你喜欢

转载自blog.csdn.net/wyll19980812/article/details/108116534