leetcode 229: Majority Element II
element
A Vue.js 2.0 UI Toolkit for Web
项目地址:https://gitcode.com/gh_mirrors/eleme/element
·
Majority Element II
Total Accepted: 3172 Total Submissions: 14746Given an integer array of size n, find all elements that appear more than⌊ n/3 ⌋ times. The algorithm should run in linear time and in O(1) space.
[思路]
[REFERENCE] http://bookshadow.com/weblog/2015/06/29/leetcode-majority-element-ii/
观察可知,数组中至多可能会有2个出现次数超过 ⌊ n/3 ⌋ 的众数
记变量n1, n2为候选众数; c1, c2为它们对应的出现次数
遍历数组,记当前数字为num
若num与n1或n2相同,则将其对应的出现次数加1
否则,若c1或c2为0,则将其置为1,对应的候选众数置为num
否则,将c1与c2分别减1
最后,再统计一次候选众数在数组中出现的次数,若满足要求,则返回之。
[CODE]
public class Solution {
public List<Integer> majorityElement(int[] nums) {
// 1, 2
List<Integer> res = new ArrayList<>();
if(nums==null || nums.length==0) return res;
if(nums.length==1) {
res.add(nums[0]);
return res;
}
int m1 = nums[0];
int m2 = 0;
int c1 = 1;
int c2 = 0;
for(int i=1; i<nums.length; i++) {
int x = nums[i];
if(x==m1) ++c1;
else if(x==m2) ++c2;
else if(c1==0) {
m1 = x;
c1 = 1;
} else if(c2==0) {
m2 = x;
c2 = 1;
} else {
--c1; --c2;
}
}
c1 = 0; c2 = 0;
for(int i=0; i<nums.length; i++) {
if(m1 == nums[i]) ++c1;
else if(m2 == nums[i]) ++c2;
}
if(c1>nums.length/3) res.add(m1);
if(c2>nums.length/3) res.add(m2);
return res;
}
}
A Vue.js 2.0 UI Toolkit for Web
最近提交(Master分支:4 个月前 )
c345bb45
1 年前
a07f3a59
* Update transition.md
* Update table.md
* Update transition.md
* Update table.md
* Update transition.md
* Update table.md
* Update table.md
* Update transition.md
* Update popover.md 1 年前
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)