网络异常,图片无法展示
|
网络异常,图片无法展示
|
移动零
题目
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0]
题解
思路一:
遍历数组,将为0的数删除。最后将后面缺失的位置补0。
网络异常,图片无法展示
|
思路二:
使用左右指针指向为0的左右边界。当遍历遇到不为0的数值时,将该值与左边界的0交换,左右边界向后移;遇到的值为0时,直接扩展0的有边界,继续下一步骤。
网络异常,图片无法展示
|
网络异常,图片无法展示
|
代码
思路一:
var moveZeroes = function (nums) { let len = nums.length - 1 for (let i = 0; i < nums.length; i++) { if (nums[i] == 0) { nums.splice(i, 1) i-- } } while (nums.length <= len) { nums.push(0) } return nums };
思路二:
var moveZeroes = function (nums) { let l = 0, r = 0, index = 0 while (index < nums.length) { if (nums[index] == 0) { r = index++ } else { swap(nums, l++, index++) r++ } } return nums }; function swap(arr, i, j) { let temp = arr[i] arr[i] = arr[j] arr[j] = temp }
网络异常,图片无法展示
|
两数之和 II - 输入有序数组
题目
给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。
函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。
你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。
示例 1: 输入:numbers = [2,7,11,15], target = 9 输出:[1,2] 解释:2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。
题解
在输入的数组中,必然有唯一一对答案存在,所以我们可以忽略没有的情况。顺序数组中使用左右指针,分别指向头和尾。判断两者相加情况:相等直接返回;大于目标值,说明尾部数值过大,缩小范围,将右指针左移;小于目标值,说明左指针数值过小,左指针右移。直到左右指针相遇。
网络异常,图片无法展示
|
代码
var twoSum = function (numbers, target) { let l = 0, r = numbers.length - 1, mid while (l < r) { if (numbers[l] + numbers[r] === target) return [l + 1, r + 1] if (numbers[l] + numbers[r] > target) r-- else if (numbers[l] + numbers[r] < target) l++ } return [-1, -1] };
题目来源:leetcode