算法刷题-day2

37 阅读1分钟

977-有序数组的平方

利用双指针来求解,利用新数组来求解,左指针和右指针对比,将新值对比填写进新数组中

var sortedSquares = function(nums) {
    let i = 0, j = nums.length - 1,k = nums.length -1;
    let result = new Array(k).fill(0);
    while(i <= j) {
        if(nums[i] * nums[i] > nums[j] * nums[j]) {
            result[k--] = nums[i] * nums[i];
            i++;
        } else {
            result[k--] = nums[j] * nums[j]
            j--;
        }
    }
    return result;
};

24-移除元素

一种很新奇的解题思路,根据题,一开始可能自己还想着调用数组的api来解,看了视频才觉得好美妙,希望自己以后能善用,多刷多刷

var removeElement = function(nums, val) {
    // 慢指针代表要操作的数组元素下标
    // 快指针代表要操作数组元素的值
    let slow = 0,fast = 0;
    while(fast < nums.length) {
        if(nums[fast] !== val) {
            nums[slow] = nums[fast];
            slow++;
        }
        fast++;
    }
    return slow
};

209-长度最小的子数组

循环++右指针,和左指针一起找到第一个大于target的区间,[left,right],然后不断右移左指针,和之前的区间长度相比,谁小就取谁

var minSubArrayLen = function(target, nums) {
    // 滑动窗口的思想,定义前后指针
    let left = 0 , right = 0;
    let sum = 0, res = nums.length+1;
    while(right < nums.length) {
        sum += nums[right]
        if(sum >= target) {
            while(sum - nums[left] >= target) {
                sum = sum - nums[left];
                left++;
            }
            res = Math.min(res,right - left + 1)
        }
        right++;
    }
    return res === nums.length + 1 ? 0 :res
};