有序数组的平方

思路与LeetCode88题一样,只是稍微进行点修改
因为数组是有序的,只要把负数单独摘出,平方后逆序插入新数组就可以解决问题。
  1 2 3 0 0 0
  2 5 6
由于数组已经是排好顺序的,最末尾的元素必定时最大的,我们只要对最末尾的元素进行比较,将最末尾的元素放到最尾端,然后不断进行比较即可,而这里我们需要用到 3个指针。一个指针指向nums1数组的最后一个值,一个指向nums1的nums1[m-1]值,一个指向nums2[n-1]。
 
 
指针索引注意细节:
当橙色指针的索引小于 0时,数组已经排好顺序了。同时本题一定要把负数单独摘出来
public int [] sortedSquares( int [] A) {
     int len=A. length ;
     int i= 0 ;
     while (i<len&&A[i]< 0 ){
        ++i;
    }
     int j=i;
 
     int []nums1= new int [len];
     for ( int k=i- 1 ;k>= 0 ;k--){
 
        nums1[i- 1 -k]=A[k]*A[k];
    }
     int []nums2= new int [len-j];
     for ( int z= 0 ;z<nums2. length ;z++){
 
        nums2[z]=A[j]*A[j];
        j++;
    }
 
 
     int i1=i- 1 ;
     int i2=nums2. length - 1 ;
     int cur=nums1. length - 1 ;
 
 
 
 
     // 不用观察 i1 是否小于等于 0 ,因为当 i1 小于等于 0 时, i2 仍然继续执行
     //i2 小于 0 时, i1 已经拍好顺序了
     while (i2>= 0 ){
         if (i1>= 0 &&nums1[i1]>=nums2[i2]){
 
            nums1[cur--]=nums1[i1--];
        } else { // i1 < 0 || nums2[i2] >= nums1[i1]
             nums1[cur--]=nums2[i2--];
        }
    }
     return nums1;
}
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值