题目描述:
给你一个按 非递减顺序 排序的整数数组 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; }
标签:平方,right,nums,int,数组,Leetcoed,left From: https://www.cnblogs.com/kknothing/p/17133140.html