网络异常,图片无法展示
|
网络异常,图片无法展示
|
有序数组的平方
给你一个按 非递减顺序 排序的整数数组 nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
示例 1: 输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 [16,1,0,9,100] 排序后,数组变为 [0,1,9,16,100]
题解
将该题转为求最小值位置,然后顺序排序。先将数组中数值平方后,然后求得最小值的位置。将最小值放到一个新的数组中。
使用归并排序核心,左右指针遍历数组,将从最小值位置分别向两端遍历,将小的放到新的数组中。返回改新数组。
网络异常,图片无法展示
|
找到最小值位置后,左右两边为l、r指针。比较两者所指位置的值,将小值放入到新的数组中,对应的指针移动一步。
网络异常,图片无法展示
|
在左右指针有一边走到头时,就单独遍历没有走到头的一边。
代码
var sortedSquares = function (nums) { let min = 0 for (let i = 0; i < nums.length; i++) { nums[i] = Math.pow(nums[i], 2) min = nums[min] > nums[i] ? i : min } let arr = [] arr[0] = nums[min] let l = min - 1, r = min + 1, index = 1 while (l >= 0 && r < nums.length) arr[index++] = nums[l] > nums[r] ? nums[r++] : nums[l--] while (l >= 0) arr[index++] = nums[l--] while (r < nums.length) arr[index++] = nums[r++] return arr };
旋转数组
给定一个数组,将数组中的元素向右移动 k
个位置,其中 k
是非负数。
示例 1: 输入: nums = [1,2,3,4,5,6,7], k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右旋转 1 步: [7,1,2,3,4,5,6] 向右旋转 2 步: [6,7,1,2,3,4,5] 向右旋转 3 步: [5,6,7,1,2,3,4]
题解
思路一:
使用新的数组,将倒数k个数push到新数组中(nums.length - k +1),然后将0到nums.length - k个数顺序push到数组中。最后返回新的数组。
网络异常,图片无法展示
|
思路二:
在原数组上,将末尾的数出栈,使用变量存贮,然后从头部压入,循环k次。
网络异常,图片无法展示
|
搞一个从i到j位置反转数组的函数。先将数组整体反转。然后,从k位置分开,两边分别反转。
网络异常,图片无法展示
|
代码
思路三:
var rotate = function (nums, k) { reverse(nums, 0, nums.length - 1) reverse(nums, 0, (k % nums.length) - 1) reverse(nums, (k % nums.length), nums.length - 1) return nums }; function reverse(nums, i, j) { while (i < j) { swap(nums, i++, j--) } } function swap(nums, i, j) { let temp = nums[i] nums[i] = nums[j] nums[j] = temp }
题目来源:leetcode