leetcode 总结 03 多数元素

leetcode 总结 03 多数元素

多数元素

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

示例 1:

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

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

进阶:

尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。

作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions/xm77tm/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 解题思路:找到数量最多的数字 
// 1. 可以用map , 放进去每一个元素,然后更新这个元素的个数,最后查找map 中元素的第二位数值。(肯定可行,但是 时间复杂度 控件复杂度不合适)
// 如果只需要一次遍历 , 就得找一个数值用来记录最大的数量,还得有一个标识,用来记录当前这个最大数量指向的是哪个数值
class Solution {
public:
int majorityElement(vector<int>& nums) {
int resultNum = nums[0]; // 保存当前最大的数值,默认第一位就是最多的 [1,2,3,4,2,2,3]
int count = 0; // 保存最多的数据被记录了多少次
for(int i = 0; i < nums.size(); i++) // 正常遍历操作
{
if(nums[i] == resultNum) // 如果相等,那么 计数器加一
{
count ++;
}else // 如果不相等
{
count --; // 计数器减少 一
if(count == 0) //当计数器归零的时候,更换一下最多的记录
{
resultNum = nums[i]; // 认为当前的是最多的
count ++; // 计数器自增
}
}
}
return resultNum; // 返回当前认为记录最多的
}
};