题目建议: 本题关键在于理解双指针思想
题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
文章讲解:代码随想录
视频讲解: 双指针法经典题目 | LeetCode:977.有序数组的平方_哔哩哔哩_bilibili
第1个思路:双指针
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
//vector<int> res;//这里写的不太会
vector<int> res(nums.size());
int i=0;
int j=nums.size()-1;
//这里自己应该单独开一个res的索引!!写错了
int pos=nums.size()-1;
while(i<=j){
if(abs(nums[i])<abs(nums[j])){
res[pos--]=nums[j]*nums[j];
j--;
}else if(abs(nums[i])>=abs(nums[j])){
res[pos--]=nums[i]*nums[i];
i++;
}
}
return res;
}
};
这里使用容器vector申请一个res 不太熟悉!!
对新数组应该单独设置索引,自己也写错了!!
自己一开始写的代码有问题:
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int end=nums.size()-1;
for(int i=0;i<=end;){
if(nums[i]* nums[i]<nums[end]* nums[end]){
nums[end]=nums[end]* nums[end];
end--;
} else if((nums[i]* nums[i]==nums[end]*nums[end])){
nums[end]=nums[end]* nums[end];
end--;
}else if(nums[i]* nums[i]>nums[end]*nums[end]){
//int temp=nums[end]* nums[end];//这里写错了!!
int temp=nums[end];
nums[end]=nums[i]* nums[i];
nums[i]=temp;
end--;
}
}
return nums;
}
};
};
平方和立方的公式忘记咋写了;
这里的空间复杂度并没有要求!!
C老师说的还真对,最好不要直接再输入的nums数组上进行操作,容易导致错误!!
我的四单个if中nums[i]应该保存原有值而不是平方值!!
即便测试机通过了,但是提交时还是存在顺序问题