LeetCode - 75. Sort Colors 计数排序和快速排序变形
题目
使用类似计数排序解决
这个思路很简单,直接统计这三个数字出现的次数,然后填充一遍即可。
public void sortColors(int[] nums) {
int[] count = new int[3];
for(int i = 0; i < nums.length; i++)
count[nums[i]]++;
int k = 0;
for(int i = 0; i < 3; i++){
for(int j = 0; j < count[i]; j++){
nums[k++] = i;
}
}
}
使用快速排序的 partition 过程解决
还可以使用快速排序中的三路快排的思想来解决这个问题,快速排序的 partition
过程也是经典的荷兰国旗问题。
public void sortColors(int[] nums) {
if(nums == null || nums.length < 2)
return;
partition(nums,0,nums.length-1);
}
public void partition(int[] arr,int L,int R){
int less = -1;//左边界
int more = arr.length; //右边界
int cur = 0;
while(cur < more){
if(arr[cur] == 0)
swap(arr,++less,cur++);
else if(arr[cur] == 2)
swap(arr,--more,cur);
else
cur++;
}
}
private void swap(int[] arr,int i,int j){
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论