跳到文章开头
  1. Algorithms/

有序数组的平方

·1 分钟
代码随想录
春江花朝秋月夜
作者
春江花朝秋月夜
重湖叠𪩘清嘉。有三秋桂子,十里荷花。羌管弄晴,菱歌泛夜,嬉嬉钓叟莲娃。千骑拥高牙。乘醉听箫鼓,吟赏烟霞。异日图将好景,归去凤池夸。
 ·  页面点击量:

977

有序数组的平方

输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]

最大元素在两边,使用两个指针从两边到中间合拢

更新方法从大到小

 vector<int>result(nums.size(),0);
 int k=nums.size()-1;//新数组的下标
 int i=0,j=nums.size()-1; //分别从两边往中间取
 while(i<=j){
     if(nums[i]*nums[i]<nums[j]*nums[j]){
         result[k--]=nums[j]*nums[j];
         j--;
     }
     //num[i]*nums[i] >= nums[j]*nums[j]
     else {
         result[k--]=nums[i]*nums[i];
         i++;
     }
 }
 return result;
class Solution {
    public int[] sortedSquares(int[] nums) {
        int []res = new int [nums.length ];
        int k = nums.length -1;
        int j=nums.length-1;
        int i =0;
         while(i<=j){
            if(nums[i]*nums[i] > nums[j]*nums[j]){
                res[k--] = nums[i]*nums[i];
                i++;
            }else{
                res[k--] = nums[j]*nums[j];
                j--;
            }
         }
         return res;
    }
}

相关文章

二分法
·1 分钟
代码随想录
哈希篇
·2 分钟
代码随想录
复杂度
·1 分钟
代码随想录