题目地址(229. 多数元素 II)
https://leetcode.cn/problems/majority-element-ii/
题目描述
给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。
示例 1:
输入:nums = [3,2,3]
输出:[3]
示例 2:
输入:nums = [1]
输出:[1]
示例 3:
输入:nums = [1,2]
输出:[1,2]
提示:
1 <= nums.length <= 5 * 104
-109 <= nums[i] <= 109
进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1)的算法解决此问题。
前置知识
公司
- 暂无
思路
关键点
代码
- 语言支持:Java
Java Code:
class Solution {
public List<Integer> majorityElement(int[] nums) {
if(nums.length == 1) return Arrays.asList(nums[0]);
//[ n / 3 ] 只有两个
int count1 = 1, count2 = 0;
int num1 = nums[0], num2 = nums[0]; //最多的两位数
for(int i = 1; i< nums.length;i++){
if(num1 == nums[i]){
count1++;
continue;
}else if(num2 == nums[i]){
count2++;
continue;
}
if(count1 == 0){
num1 = nums[i];
count1 = 1;
continue;
}
if(count2 == 0){
num2 = nums[i];
count2 = 1;
continue;
}
count1--;
count2--;
}
count1 = count2 = 0;
for(int num : nums){
if( num == num1 ){
count1 ++;
}else if( num == num2 ){
count2++;
}
}
List<Integer> res = new ArrayList<>();
if( count1 > nums.length / 3 ) res.add(num1);
if( count2 > nums.length / 3 ) res.add(num2);
return res;
}
}
复杂度分析
令 n 为数组长度。
- 时间复杂度:O ( n ) O(n)O(n)
- 空间复杂度:O ( n ) O(n)O(n)
版权声明:本文为u013591094原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。