【剑指offer】面试题39. 数组中出现次数超过一半的数字

解题思路

利用题目所给数组特性,所求元素在数组中出现次数超过一半
设置两个变量:
result//记录当前元素值
times//记录次数
当我们遍历到下一个数字的时候,如果下一个数字和我们之前保存的数字相同,则次数+1;如果下一个数字和我们之前保存的数字不同,则次数-1.如果次数为0,那么我们需要保存下一个数字
,并把次数设为1.

代码

class Solution
{
public:
	int majorityElement(vector<int>& nums) {
		int result=nums[0];
		int times = 1;
		for (vector<int>::iterator it=nums.begin()+1;it!=nums.end();it++)
		{
			//次数为0,则更新result
			if (times == 0) {
				result = *it;
				times = 1;
			}
			//相等,次数+1
			else if(result==*it)
			{
				times++;
			}
			//不相等,次数-1
			else
			{
				times--;
			}
		}
		return result;
	}
};

你可能感兴趣的:(【魂】算法)