题目链接:https://leetcode-cn.com/problems/sort-colors/
思路:用两个指针,一个表示0的位置(p0),一个表示1的位置(p1)。然后从前往后遍历,有三种情况:
(1)如果i的位置的元素是0,就交换p0与i的位置的元素。此时还需要判断p0的位置的元素是不是1,也就是判断p0是不是小于p1,如果是则再交换p1与i的位置的元素(就是把前面交换到i位置的1再交换到p1的位置),如果不是就什么都不做。最后p0++,p1++
(2)如果i的位置的元素是1,就交换p1与i的位置的元素,p1++
(3)如果i的位置的元素是2,就什么都不做
上代码:
class Solution {
fun sortColors(nums: IntArray): Unit {
var p0 = 0
var p1 = 0
for (i in nums.indices) {
if (nums[i] == 0) {
nums[p0] = nums[i].also { nums[i] = nums[p0] }
if (p0 < p1) {
nums[p1] = nums[i].also { nums[i] = nums[p1] }
}
p1++
p0++
} else if (nums[i] == 1) {
nums[p1] = nums[i].also { nums[i] = nums[p1] }
p1++
}
}
}
}
该篇博客介绍了一种解决LeetCode问题《排序颜色》的算法,通过双指针p0和p1分别跟踪0和1的位置,遍历数组并根据元素值进行交换,有效地将0、1、2三个颜色的元素排序。代码实现采用Kotlin语言,思路清晰,操作简洁。
476

被折叠的 条评论
为什么被折叠?



