Tcdian / keep

今天不想做,所以才去做。
MIT License
5 stars 1 forks source link

75. Sort Colors #208

Open Tcdian opened 4 years ago

Tcdian commented 4 years ago

75. Sort Colors

给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地 对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

此题中,我们使用整数 0、 12 分别表示红色、白色和蓝色。

Example

Input: [2,0,2,1,1,0]
Output: [0,0,1,1,2,2]

Note

Follow up

Tcdian commented 4 years ago

Solution

/**
 * @param {number[]} nums
 * @return {void} Do not return anything, modify nums in-place instead.
 */
var sortColors = function(nums) {
    let red = 0;
    let blue = nums.length - 1;
    let i = 0;
    while (i <= blue) {
        if (nums[i] === 0) {
            swap(nums, i++, red++);
        } else if (nums[i] === 2) {
            swap(nums, i, blue--);
        } else {
            i++;
        }
    }
};

function swap(nums, x, y) {
    let temp = nums[x];
    nums[x] = nums[y];
    nums[y] = temp;
}
/**
 Do not return anything, modify nums in-place instead.
 */
function sortColors(nums: number[]): void {
    let red = 0;
    let blue = nums.length - 1;
    let i = 0;
    while (i <= blue) {
        if (nums[i] === 0) {
            swap(nums, i++, red++);
        } else if (nums[i] === 2) {
            swap(nums, i, blue--);
        } else {
            i++;
        }
    }
}

function swap(nums: number[], x: number, y: number) {
    let temp = nums[x];
    nums[x] = nums[y];
    nums[y] = temp;
}