您的位置:首页 > 其它

[刷题]Sort Colors

2015-09-15 14:41 267 查看
[刷题]Sort Colors

Version 1 思路简单 O(n)

class Solution {
/**
* @param nums: A list of integer which is 0, 1 or 2
* @return: nothing
*/
public void sortColors(int[] nums) {
// 2015-09-15
if (nums == null || nums.length == 0) {
return;
}

int count0 = 0;
int count1 = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] == 0) {
count0++;
} else if (nums[i] == 1) {
count1++;
}
}

for (int i = 0; i < nums.length; i++) {
if (count0 > 0) {
nums[i] = 0;
count0--;
} else if (count1 > 0) {
nums[i] = 1;
count1--;
} else {
nums[i] = 2;
}
}

return;
}
}


Version 2 一次循环 O(n)

class Solution {
/**
* @param nums: A list of integer which is 0, 1 or 2
* @return: nothing
*/
public void sortColors(int[] nums) {
// 2015-09-15 O(n)
if(nums == null || nums.length <= 1)
return;

// pl 指向0后一个数
int pl = 0;
// pr 指向2前一个数
int pr = nums.length - 1;
int i = 0;
while(i <= pr){
if(nums[i] == 0){
// 遇到0 换到前面
swap(nums, pl, i);
pl++;
i++;
}else if(nums[i] == 1){
i++;
}else{
// 遇到2 换到后面
swap(nums, pr, i);
pr--;
}
}
}

private void swap(int[] a, int i, int j) {
if (i == j) {
return;
}
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: