算法题---双指针之有序数组的平方 2022-02-25 15:53 有序数组的平方 ### 题目: 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 [16,1,0,9,100] 排序后,数组变为 [0,1,9,16,100] 来源:[力扣(LeetCode)](https://leetcode-cn.com/problems/squares-of-a-sorted-array) 这道题和[合并有序链表](http://riun.xyz/work/194)有点像。 ### 思路: 这个类似于找规律的题目,说实话感觉没有明显的思路,就是知道这样的题目要这么做,拿两头去比较,然后取哪边,哪边就移动到下一个元素。 ### 代码: ```java package com.example.demo.core.Leecode; import java.util.Arrays; /** * @author: HanXu * on 2022/2/25 * Class description: 有序数组的平方 * <p> * 这道题和合并有序链表有点像 */ public class ArrNumSquare { public static void main(String[] args) { // int[] nums = {-4, -1, 0, 3, 10}; int[] nums = {1, 4, 5, 7, 10}; int[] ints = sortedSquares(nums); System.out.println(Arrays.toString(ints)); } /** * 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 * <p> * 输入:nums = [-4,-1,0,3,10] * 输出:[0,1,9,16,100] * 解释:平方后,数组变为 [16,1,0,9,100] * 排序后,数组变为 [0,1,9,16,100] * <p> * 来源:力扣(LeetCode) https://leetcode-cn.com/problems/squares-of-a-sorted-array * * @param nums * @return */ public static int[] sortedSquares(int[] nums) { int len = nums.length; int[] newArr = new int[len]; int l = 0, r = len - 1; for (int i = len - 1; i >= 0; i--) { //左端点和右端点,哪边的绝对值大就放哪边,放完后移动左或右指针 if (Math.abs(nums[l]) > Math.abs(nums[r])) { newArr[i] = nums[l] * nums[l]; l++; } else { newArr[i] = nums[r] * nums[r]; r--; } } return newArr; } } ``` --END--
发表评论