自己做出来的一道题,很简单,一次遍历,三个指针,其实是两指针吧。
给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sort-colors
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public void sortColors(int[] nums) {
if(nums.length == 0){return ;}
int i = 0 , j = nums.length - 1 ;
int m = 0 ;
int temp = 0 ;
while( i < j && m <= j ){//分三种情况
if(nums[m]==0){
temp = nums[m] ;
nums[m] = nums[i];
nums[i] = temp ;
i ++ ;
m ++ ;
continue ;
}else if(nums[m]==2 ){
temp = nums[m] ;
nums[m] = nums[j];
nums[j] = temp ;
j -- ;
if(nums[m ] == 1){
m ++ ;
}
}else{
m ++ ;
}
}
}
}
也叫荷兰国旗问题。
时间复杂度:O(n)
空间复杂度:O(1)