标签:
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