算法题之颜色分类问题(O(n)时间复杂度)
题目描述
思路分析
思路一图解
思路2图解
代码实现
public void sortColors(int[] nums
) {
int left
= 0;
int right
= nums
.length
- 1;
for (int i
= 0; i
< nums
.length
; i
++) {
while (i
<= right
&& nums
[i
] == 2) {
int temp
= nums
[i
];
nums
[i
] = nums
[right
];
nums
[right
] = temp
;
right
--;
}
if (nums
[i
] == 0) {
int temp
= nums
[i
];
nums
[i
] = nums
[left
];
nums
[left
] = temp
;
left
++;
}
}
}
public void sortColors02(int[] nums
) {
int p
= 0;
for (int i
= 0; i
< nums
.length
; i
++) {
if (nums
[i
] == 0) {
int temp
= nums
[i
];
nums
[i
] = nums
[p
];
nums
[p
] = temp
;
p
++;
}
}
for (int i
= p
; i
< nums
.length
; i
++) {
if (nums
[i
] == 1) {
int temp
= nums
[i
];
nums
[i
] = nums
[p
];
nums
[p
] = temp
;
p
++;
}
}
}
转载请注明原文地址:https://blackberry.8miu.com/read-30182.html