算法随想录

82 阅读1分钟

算法每日一更,记录我的成长。

有序数组的平方

力扣题目链接 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

示例 1:

输入: nums = [-4,-1,0,3,10]
输出: [0,1,9,16,100]
解释: 平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]

示例 2:

输入: nums = [-7,-3,2,3,11]
输出: [4,9,9,49,121]

第四更,今天带来的是有序数组的平方,因为数组是有序的,但是可能存在负值,所以在我们平方之后,数组的最大值就在数组最左边或者是最右边,那个我们就可以采用之前用到的双指针法。

定义一个新的数组res,这个数组的大小应该是和之前的nums数组大小一样的,并且指定last为res的终止位置

if(nums[i] * nums[i] < nums[j] * nums[j]) res[last--] = nums[j]
if(nums[i] * nums[i] > nums[j] * nums[j]) res[last--] = nums[i]

下面展示javaScript版本的代码:

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

以上就是今天带来的内容,觉得还不错的可以点个赞,有不对的地方也欢迎大佬帮忙斧正