LeetCode | 977. 有序数组的平方

题:力扣

977. 有序数组的平方

给你一个按 非递减顺序 排序的整数数组 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]
 

提示:

1 <= nums.length <= 104
-104 <= nums[i] <= 104
nums 已按 非递减顺序 排序
 

进阶:

请你设计时间复杂度为 O(n) 的算法解决本问题
通过次数494,637提交次数723,726

我的原始求解:

循环平方,sort函数排序

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

 我的另外求解:

class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {   
        //由于数组是从小到大排序的,可以前后对比,逼近中间 
        vector<int> res(nums.size(), 0); //vector初始化大小,全部是0        
        int k = nums.size() - 1;
        for (int i = 0,j = nums.size() - 1; i <= j;) {
            if (nums[i] * nums[i] >  nums[j] * nums[j]) {
               res[k] = nums[i] * nums[i] ;  //大的存放到最后面
               k = k - 1;
               i = i + 1;
            }
            else{
                res[k] = nums[j] * nums[j];  //大的存放到最后面
                k = k - 1;
                j = j - 1;
            }
        }
        
     
        return res;
    }
};

时间复杂度为O(n)

python:

class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:       
        res = [0] * len(nums)   # [0, 0, 0, ....]
        k = len(nums) - 1
        i = 0
        j = len(nums) - 1
        while(i<=j):           
            if nums[i] ** 2 > nums[j] ** 2:
                res[k] = nums[i] ** 2 
                k = k - 1
                i = i + 1
            else:
                res[k] = nums[j] ** 2
                k = k - 1
                j = j - 1
        return res

——————

浅谈则止,细致入微AI大道理

扫描下方“AI大道理”,选择“关注”公众号

—————————————————————

—————————————————————

猜你喜欢

转载自blog.csdn.net/qq_42734492/article/details/129500419