双指针的使用--有序数组的平方

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

我们可以定义两个指针,R指针指向大于等于0的第一个位置,L指针=R-1

L指针向左移动,R指针向右开始移动,

比较两个指针元素平方的大小,小的加入到新的数组中去,

就和归并排序是差不多的。 

	public static int[] sortedSquares(int[] nums) {
        int i;
		for(i=0;i<nums.length;i++) {//找到大于等于0的第一个数
			if(nums[i]>=0) {
				break;
			}
		}
		int[] help = new int[nums.length];//开辟辅助数组
		
		int L = i-1;
		int R = i;
		i=0;
		while(L>=0&&R<nums.length) {//L指针向左移动,R指针向右移动,小的那个加入到help数组中去
			
			help[i++] = squares(nums[L])>squares(nums[R])?squares(nums[R++]):squares(nums[L--]);
		}
		while(L>=0) {
			help[i++] = squares(nums[L--]);
		}
		while(R<nums.length) {
			help[i++] = squares(nums[R++]);
		}
		for(i=0;i<nums.length;i++) {
			nums[i] = help[i];
		}
		
		
		return nums;
    }
    public static int squares(int L) {
		return (int) Math.pow(L, 2);
	}
	public static void main(String[] args) {
		int[] arr= {-5,-3,0,3,5};
		sortedSquares(arr);
		for(int i:arr) {
			System.out.println(i);
		}
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值