【代码随想录算法训练营第二天】977.有序数组的平方、209.长度最小的子数组 、59.螺旋矩阵II

发布时间 2023-09-15 16:00:45作者: 只想休息

Day2-数组2023.9.15

Leetcode977 有序数组的平方

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

初解

我还是不能想到暴力解法之外的,对某个问题的最优复杂度也没有概念。就算提示我是用指针,我也想不到思路。
现在我知道的指针主要有快慢指针和双向指针。
受昨天那个原地换位置的影响,我也下意识没有想到新开一个数组。

看完解答

思路很简单:开一个新的数组,依次放进最大的数。最大的数必然在两侧(绝对值最大)。每次放进一个数,左右指针移动即可。
实现也很简单我一次就过了。

class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        int len=nums.size();
        int l=0,r=len-1;
        // 最大的一定在两头。
        vector<int> res;
        res.resize(len);
        int p=len-1;
        while(p>=0&&l<=r){
            if(nums[l]*nums[l]>nums[r]*nums[r]){
                res[p--]=nums[l]*nums[l];
                l++;
            }else{
                res[p--]=nums[r]*nums[r];
                r--;
            }
        }
        return res;
    }
};