2023.10.13
题目不让用sort方法,所以先用冒泡排序做了一下:
冒泡排序
class Solution {
public void sortColors(int[] nums) {
for(int i=0; i<nums.length-1; i++){
for(int j=0; j<nums.length-1; j++){
if(nums[j] > nums[j+1]){
int temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
}
}
}
时间复杂度有点高,于是看了下解题区,因为数组中的数字必为0、1或者2,所以可以用两次遍历将0和1分别放在数组的前部分和中部分。 java代码如下:
单指针:
class Solution {
public void sortColors(int[] nums) {
int cur = 0;//单指针
for(int i=0; i<nums.length; i++){
if(nums[i] == 0){
nums[i] = nums[cur];
nums[cur++] = 0;
}
}
for(int i=cur; i<nums.length; i++){
if(nums[i] == 1){
nums[i] = nums[cur];
nums[cur++] = 1;
}
}
}
}