标签:
Given 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.
Hint:
Subscribe to see which companies asked this question
思路:
最多只能有两个数符合结果,因此用两个变量,计算它们是否超过? n/3 ?。
java code:
public class Solution {
public List<Integer> majorityElement(int[] nums) {
List<Integer> ans = new ArrayList<Integer>();
if(nums == null || nums.length == 0) return ans;
int x = 0, y = 1;
int cx = 0, cy = 0;
for(int num : nums) {
if(num == x) {
cx++;
}
else if(num == y) {
cy++;
}
else if(cx == 0) {
x = num;
cx = 1;
}
else if(cy == 0) {
y = num;
cy = 1;
}
else {
cx--;
cy--;
}
}
cx = cy = 0;
for(int num : nums) {
if(num == x) cx++;
else if(num == y) cy++;
}
if(cx > nums.length/3) ans.add(x);
if(cy > nums.length/3) ans.add(y);
return ans;
}
}标签:
原文地址:http://blog.csdn.net/itismelzp/article/details/51685255