Leetcoed:有序数组的平方
题目描述:
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
解题思路:
暴力解法:
将数组中每个元素都取其平方后,在对数组进行全部排序。这种解法最为简单,但是题目中的非递减排序的整数数组这个条件完全没有使用。
代码实现:
int left = 0;for(int right = 0 ;right != nums.size();right++){nums[left]=nums[right]*nums[right];left++;}sort(nums.begin(),nums.end());return nums;}
双指针解法:
已知数组是有序的整数数组,当数组中的元素均为正整数时,对其取平方,数组中元素顺序不会发生改变;当数组中存在负整数元素时,最小的负整数元素的平方存在大于最大整数的元素平方的可能。
此时,我们设指针left指向数组的首端,指针right指向数组的尾端;使用双指针由数组的首位两端开始遍历同时对数组元素取其平方值。将较大的一个放入新数组的尾部。依次进行如上操作即可。
代码实现:
int len=nums.size();vector<int> target(len);int left=0;int right=len-1;for(int i = len-1;left<=right;--i){//Compare(left,right,nums);if((nums[right]*nums[right])>(nums[left]*nums[left])){target[i]=nums[right]*nums[right];--right;}else{target[i] = nums[left]*nums[left];++left;}// --i;}return target;}

浙公网安备 33010602011771号