977.有序数组的平方

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

示例 1:

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

简单粗暴:平方后使用sort排序 (时间复杂度为O(nlogn)

class Solution {
public:
    vector sortedSquares(vector& nums) {
       for(int i = 0; i < nums.size(); i++){
            nums[i] *= nums[i];
        }
        sort(nums.begin(), nums.end());
        return nums;
    }
};

双指针:时间复杂度为O(n)

class Solution {
public:
    vector sortedSquares(vector& nums) {
       vector result(nums.size());
       int k = nums.size() - 1;
       int left = 0;
       int right = nums.size() - 1;
       while(left<=right){
           if(nums[left] * nums[left] < nums[right] * nums[right]){
               result[k--] = nums[right] * nums[right];
               right--;
           }
           else{
               result[k--] = nums[left] * nums[left];
               left++;
           }
       }
       return result;
    }
};

你可能感兴趣的:(算法,leetcode,数据结构)