【重点】【三指针】【荷兰国旗问题】【快排】75.颜色分类
2023-12-27 21:21:07
法1:快排
必须掌握快排方法!!!
class Solution {
public void sortColors(int[] nums) {
int n = nums.length;
quickSort(0, n - 1, nums);
}
public void quickSort(int start, int end, int[] nums) {
if (start >= end) {
return;
}
int left = start, right = end;
while (left < right) {
while (nums[right] > nums[start] && left < right) {
--right;
}
while (nums[left] <= nums[start] && left < right) {
++left;
}
if (left < right) {
swap(left, right, nums);
}
}
swap(start, right, nums);
quickSort(start, left - 1, nums);
quickSort(left + 1, end, nums);
}
public void swap(int left, int right, int[] nums) {
int tmp = nums[left];
nums[left] = nums[right];
nums[right] = tmp;
}
}
法2:三指针/荷兰国旗问题
思路还是很清晰的,多指针,一头一尾分别用来放置0和2
中间的指针则进行遍历,发现元素0则跟头指针交换元素,并各自加1,发现元素2则跟尾指针交换,尾指针减1
class Solution {
public void sortColors(int[] nums) {
int left = 0, right = nums.length - 1, curInx = 0;
while (curInx <= right) { // 注意这里需要有"="
if (nums[curInx] == 0) {
swap(left, curInx, nums);
++left;
++curInx;
} else if (nums[curInx] == 2) {
swap(right, curInx, nums);
--right; // 交换过来的这个新的nums[curInx]还要继续进行鉴定
} else {
++curInx;
}
}
}
public void swap(int i, int j, int[] nums) {
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
}
文章来源:https://blog.csdn.net/Allenlzcoder/article/details/135249956
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!