169.多数元素
题目:
给定一个大小为 n
的数组 nums
,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋
的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例:
示例 1:
输入:nums = [3,2,3] 输出:3
示例 2:
输入:nums = [2,2,1,1,1,2,2] 输出:2
提示:
n == nums.length
1 <= n <= 5 * 104
-109 <= nums[i] <= 109
整体思路:
本题说明一定会有多数元素(大于数组一半的数量),遍历数组,不同的直接相互消掉(就算有1112222这种情况,多数元素也会剩下一个也就是输出值)
有相同的值标记+1,没有相同的标记-1,如果减到0了更新对比值(答案)标记+1继续往后对比。留到最后的就是多数元素
代码:
class Solution {
public:int majorityElement(vector<int>& nums) {int res = -1;//对比值(答案)int flage = 0;//标记for(int i = 0 ; i < nums.size(); i++){if(flage == 0){//1.将对比值(答案)更新为数组第一个元素//2.将对比值(答案)更新为(不同的消除掉)元素的下一个元素//比如1112222这个例子flage再为0就是111222都被消除掉对比值(答案)更新为最后一个2res = nums[i];flage++;//将标记+1下一次不进入这个if,直接去对比下一个元素}else if(res == nums[i]){//对比相同flage++;//标记+1,不用去of更新对比值(答案)接着和下一个对比}else{flage--;//对比不相同,标记-1,不记录元素(也就是消除),让当前对比值(答案)与下一个元素接着比直到flage为0就更新对比值(答案)接着比}}return res;//答案}
};