题目建议: 本题关键在于理解双指针思想
题目链接:力扣(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]应该保存原有值而不是平方值!!
即便测试机通过了,但是提交时还是存在顺序问题