CanTechLab

Can

Leetcode:977.有序数组的平方

2024-05-12

Leetcode题目链接: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]

解题思路:

双指针

  • 输入数组以非递减的形式给出 这决定了平方后最大的元素只会出现在数组的两端

  • 定义数组result 用于存储最终结果 指针 k 用于指定存储位置 每存储一个当前最大元素的平方后 k--

  • 指针 i 从数组开头向后推进 指针 j 从数组末尾向前推进

  • 当满足 i > j 时循环结束 result数组中存档好了最后排序的结果

我的答案:

class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
         vector<int> result(nums.size(), 0); // 初始化为与 nums 大小相同且每个元素为 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]){
                result[ k-- ] = nums[i] * nums[i];
                i++;
            }else{ 
                result[ k-- ] = nums[j] * nums[j];
                j--;
            }
        }
        return result;
    }
};

提交结果:

官方答案:

//暴力法:先计算平方再排序
class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        vector<int> ans;
        for (int num: nums) {
            ans.push_back(num * num);
        }
        sort(ans.begin(), ans.end());
        return ans;
    }
};

作者:力扣官方题解
链接:https://leetcode.cn/problems/squares-of-a-sorted-array/solutions/447736/you-xu-shu-zu-de-ping-fang-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。