[리트코드] 75. Sort Colors
75. Sort Colors
나의 풀이
var sortColors = function (nums) {
return nums.sort((x, y) => x - y);
};
sort함수를 쓰면 세상 간편하지만 문제 제약조건으로 내장함수를 사용하지 말라고 했다.
/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
let swap = function (arr, idx_1, idx_2) {
let tmp = arr[idx_1];
arr[idx_1] = arr[idx_2];
arr[idx_2] = tmp;
};
var sortColors = function (nums) {
let swapped;
for (let i = 0; i < nums.length - 1; i++) {
swapped = false;
for (let j = 0; j < nums.length - i - 1; j++) {
if (nums[j] > nums[j + 1]) {
swap(nums, j, j + 1);
swapped = true;
}
}
if (!swapped) break;
}
return nums;
};
console.log(sortColors([2, 0, 2, 1, 1, 0]));
그래서..! 버블정렬로 구현하였다.
Runtime: 76 ms, faster than 59.45% of JavaScript online submissions for Sort Colors.
생각보다 퍼센트가 높지 않아서, 다른 사람의 코드를 살펴보자
best code
var sortColors = function(nums) {
let left = 0, i = 0, right = nums.length - 1;
const swap = (i, j) => [nums[i], nums[j]] = [nums[j], nums[i]]
while(i <= right){
if(nums[i] > 1){
[nums[i], nums[right]] = [nums[right], nums[i]]
right -= 1
}else if (nums[i] < 1){
// swap(i++, left ++)
[nums[i], nums[left]] = [nums[left], nums[i]]
left += 1
i += 1
}else{
i += 1
}
}
};