Leetcode:977.有序数组的平方
编辑
28
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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
- 0
- 0
-
赞助
AliPayWeChat Pay -
分享