题:力扣
给你一个按 非递减顺序 排序的整数数组 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大道理”,选择“关注”公众号
—————————————————————
—————————————————————