您的位置:首页 > 其它

[leetcode]Majority Element II

2016-04-09 10:20 274 查看
思路:可以使用三向切分的快速排序算法,因为这种算法会把小于某个数,等于某个数,和大于某个数的分开,分成三部分。很容易判断等于某个数的全部数量,对于这种重复值问题,很有效。
public class Solution {
List<Integer> ret = new ArrayList<Integer>();
public List<Integer> majorityElement(int[] nums) {
int len=nums.length;
quickSort(nums,0,len-1);
return ret;
}
private void quickSort(int[] nums,int low,int high){
int n=nums.length;
if((high-low+1) <= n/3)
return;

int lt=low,gt=high,i=low+1,temp=nums[low];
while(i<=gt){
if(nums[i]<temp){
swap(nums,i++,lt++);
}else if(nums[i]>temp){
swap(nums,i,gt--);
}else{
i++;
}
}
if(i-lt > n/3){
ret.add(nums[lt]);
}
quickSort(nums,low,lt-1);
quickSort(nums,i,high);
}
private void swap(int[] nums,int i,int j){
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 算法