优快云话题挑战赛第2期
参赛话题:学习笔记
原题链接:力扣https://leetcode.cn/problems/squares-of-a-sorted-array/
- 思路:
题目中描述 非递减顺序排序,所以说,平方后数组两边数据最大,两边往中间逐渐递减的数据。另外要求时间复杂度是O(n),即一次循环。所以可以想到用双指针。
- 双指针思想:
双指针分为快慢指针,顾名思义就是一个指针跑的快一个指针跑的慢,另外一个是双向指针,一个左边,一个右边,往中间靠拢。这题就用双向指针。
- 代码及注释
class Solution { public int[] sortedSquares(int[] nums) { int left = 0; int right = nums.length-1; int size = nums.length-1; //定义一个大小一样空间 int[] arr = new int[nums.length]; while (left<=right){ if (nums[left] * nums[left]<nums[right]*nums[right]) { arr[size] = nums[right]*nums[right]; right--; }else { arr[size] = nums[left]*nums[left]; left++; } size--; } return arr; } }
欢迎关注微信公众号,一起学习