首页 > 其他分享 >Leetcoed:有序数组的平方

Leetcoed:有序数组的平方

时间:2023-02-18 17:47:42浏览次数:51  
标签:平方 right nums int 数组 Leetcoed left

题目描述:

给你一个按 非递减顺序 排序的整数数组 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

相关文章