【排序】【数组】LeetCode 75. 颜色分类
题目链接
思路
题目要求按0、1、2的顺序排序,因为数量有限,所以通过两次遍历,分别将0和1交换到合适的位置,这样两次遍历之后,剩下的2就都在尾部了。
circle
代表这一次要对哪个数字进行重置位置,所以它的取值就限定在0、1,因为当我们确定好0和1位置之后,2的位置也就确定好了。
p
表示当前数字应该放置的位置,因为要从前往后排0、1、2,所以初值为 p=0
。
在第二层循环中,我们将与 circle
相等的元素放在 p
的位置,如果符合条件,便将 nums[i]
与 nums[p]
的值进行交换。交换完成后 p++
,指向下一个要放置的位置。
代码
class Solution {
public void sortColors(int[] nums) {
int p = 0;
for (int circle = 0; circle < 2; ++circle) {
for (int i = p; i < nums.length; i++) {
// circle == 0 or 1
// when circle == 0, we should move 0 to nums' head
// when circle == 1, we should move 1 to nums' middle
if (circle == nums[i]) {
int temp = nums[i];
nums[i] = nums[p];
nums[p] = temp;
++p;
}
}
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本