Bootstrap

代码随想录-数组之移除元素篇-包含力扣27、26、283、844、977题-(JavaScript语言实现)

27.移除元素

var removeElement = function(nums, val) {
    let k = 0;
    for (let i = 0; i < nums.length; i++) {
        if (nums[i] !== val) {
            nums[k++] = nums[i]
        }
    }
    return k
}

26.删除有序数组中的重复项

var removeDuplicates = function(nums) {
    const n = nums.length;
    if (n === 0) return 0;
    let fast = 1, slow = 1;
    while (fast < n) {
        if (nums[fast] !== nums[fast-1]) {
            nums[slow++] = nums[fast]
        }
        fast++
    }
    return slow
}

283.移动零

var moveZeroes = function(nums) {
    const n = nums.length;
    let fast = 0, slow = 0;
    while (fast < n) {
        if (nums[fast] !== 0) {
            [nums[fast], nums[slow]] = [nums[slow], nums[fast]];
            slow++
        }
        fast++
    }
}

844.比较含退格的字符串

var backspaceCompare = function(s, t) {
    let buildAbbr = (s) => {
        let fast = 0, slow = 0;
        const arr = s.split("");
        while (fast < arr.length) {
            if (arr[fast] !== "#") arr[slow++] = arr[fast];
            else if (slow !== 0) slow--;
            fast++;
        }
        arr.length = slow;
        return arr.join("")
    }
    return buildAbbr(s) === buildAbbr(t)
}

977.有序数组的平方

// 暴力破解
var sortedSquares = function(nums) {
    let newNums = [];
    for (let i = 0; i < nums.length; i++) {
        newNums.push(nums[i] * nums[i])
    }
    return newNums.sort((a, b) => a - b)
}

// 双指针
// 一定要知道这是已经按非递减顺序排好了的,所以不是第一个最大就是最后一个最大。
// 这是解答这题的关键。了解这个之后,这个解法也就不难懂了。
const sortedSquares = function(nums) {
    let res = [];
    for (let i = 0, j = nums.length -1; i <= j;) {
        const left = Math.abs(nums[i]);
        const right = Math.abs(nums[j]);
        if (right > left) {
            res.unshift(right * right);
            j--;
        } else {
            res.unshift(left * left);
            i++
        }
    }
    return res;
}
;