知识点
双指针
题目
题解
新数组的长度与旧数组相同,因此先创建一个与旧数组长度相同的数组
设左指针为0,右指针为长度-1,此时右指针为有效值,循环时,数组需要遍历的为数组长度减一
循环中,左指针不断向右移,右指针不断向左移,当左指针小于或等于右指针时,表示数组还未遍历全,继续循环
遍历时,观察头尾平方后的数字,选择大的,放在数组最后
当左侧平方后更大,将左侧平方后数字添加到数组最后,左指针向右移
class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {int length=nums.size(); //数组长度,5vector<int> ans(length);int left=0; //从左边开始int right=length-1; //从右边开始,4,nums[right]=10length--; //4while(left<=right){if((nums[left]*nums[left])>=(nums[right]*nums[right])){ans[length]=nums[left]*nums[left];left++;}else{ans[length]=nums[right]*nums[right];right--;}length--;}return ans;}
};
相似题目:88.合并两个有序数组
题目
题解
class Solution {
public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {int length=m+n-1; //6int num1=m-1;int num2=n-1;while(num1>=0&&num2>=0) {if(nums1[num1]>=nums2[num2]){ nums1[length]=nums1[num1]; num1--; }else if(nums1[num1]<nums2[num2]){nums1[length]=nums2[num2];num2--;}length--; }if(num1<0){while(num2>=0){nums1[num2]=nums2[num2];num2--;}}}
};