有序数组的平方(双指针)

题目:

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

示例 1:

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

思路:

  • 首先排除暴力解,依次遍历平方,后排序,排序时间复杂度最低为NlogN。
  • 因为是非递减顺序排序的数组,使用两个指针分别指向第一个数和最后一个数,然后进行开平方的比较,大的放入新的数组中,指针向中间移动。
class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        int a = 0;
        int n = nums.size();
        int b = n - 1;
        int i = n - 1;
        vector<int> newNums(n);
        while(a<=b){
            if(nums[a] * nums[a] < nums[b] * nums[b]){
                newNums[i--] = nums[b]*nums[b];
                --b;
            }else{
                newNums[i--] = nums[a]*nums[a];
                ++a;
            }
        }
        return newNums;

    }
};
  • 这道题出现了很多未知错误,但最终还是一一解决,根本原因还是对语法的不熟悉。
    1. int b,i = n - 1; 其中只给i赋值,b不赋值。
    2. 新建的vector容器要说明大小,不然需要push_back才能放入数。
posted @ 2023-02-22 22:37  ku然  阅读(13)  评论(0编辑  收藏  举报