leetcode 75.颜色分类
//20220401
问题描述:
75.颜色分类
给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
必须在不使用库的sort函数的情况下解决这个问题。备注:解法比较巧妙,在此记录一下
解题思路:
- 定义三个指针(官网说的是双指针,但是for循环中的i也算一个指针,必须有一个一直前进的指针,否则遇到双指针元素都一样的话就无法进行置换,置换了也无法记录状态),for循环中的i一直前进(速度为1),定义的index1则记录数组从头开始第一个不为零的数,index2则记录倒数第一个不为2的数。
- 代码如下:
private void solution(int[] nums){
int index1 = 0;
int index2 = nums.length-1;
for(int i = 0;i<=index2;++i){
//如果i到达了index2则说明整个数组有序了,此时可以跳出循环
while(i<index2&&nums[i]==2){//保证index2后面的数字全部是2
swap(nums,i,index2);
index2--;
}
if(nums[i]==0){
//开始交换1
swap(nums,i,index1);
index1++;//index1记录第一个不为0的数字
}
}
}
private void swap(int[] nums, int i ,int j){//交换函数
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
以上
希望对后来者有所帮助
/抱拳
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2019-04-01 java_Arrays.sort()方法