标签:tco problems block ems 链接 solution utc 移动 交换
涉及知识:数组、双指针
问题描述:
? 该问题又被称为荷兰国旗问题,大概意思为给每一个数字指定一种颜色,并按荷兰国旗颜色的顺序进行调整。
算法思想:
? 设置三个指针,初始状态 low 指针指向最低位, high 指针指向高位,并设置 cur 指针指向当前的元素。cur 指针从头开始遍历。
初始化 0 的最右边界:low = 0。
初始化 2 的最左边界 :high = n - 1。
为什么和低位交换之后,两个指针均向右移,而和高位交换之后只将 high 指针向左移动?
? 因为和低位交换之后,cur 所指向的元素为 1(原先的 low 指针指向的为 1,当然刚开始的时候可能为 0,但是没有影响),而 high 指针原先指向的元素可能为 2,交换之后 cur 指向的元素可能为 2,需要在和 high 指向的元素进行交换,因此此时不可以将 cur 向右移动。
代码:
class Solution {
public void sortColors(int[] nums) {
int low = 0;
int high = nums.length - 1;
int cur = 0;
while(cur <= high){
if(nums[cur] == 0){
int tmp = nums[cur];
nums[cur] = nums[low];
nums[low] = tmp;
low++;
cur++;
}else if(nums[cur] == 2) {
int tmp = nums[cur];
nums[cur] = nums[high];
nums[high] = tmp;
high--;
} else {
cur++;
}
}
return;
}
}
标签:tco problems block ems 链接 solution utc 移动 交换
原文地址:https://www.cnblogs.com/zcxhaha/p/11406643.html