合并两个有序数组
function merge(nums1, nums2) {
var len1 = nums1.length - 1;
var len2 = nums2.length - 1;
var len = nums1.length + nums2.length - 1;
while (len1 >= 0 && len2 >= 0) {
nums1[len--] = nums1[len1] > nums2[len2] ? nums1[len1--] : nums2[len2--];
}
return nums1;
}
输入
[1, 2, 3] [2, 4, 5, 6, 7, 8, 9]
输出
[1, 2, 2, 3, 4, 5, 6, 7, 8, 9]
解析
- 获取数组1,数组2以及合并之后的数组的长度
从后遍历比较,当len1或len2为0的时候退出
序号 len1 len2 len nums1[len1] nums2[len2] nums 1 2 6 9 3 9 [1, 2, 3, empty*6, 9] 2 2 5 8 3 8 [1, 2, 3, empty*5, 8, 9] 3 2 4 7 3 7 [1, 2, 3, empty*4, 7, 8, 9] 4 2 3 6 3 6 [1, 2, 3, empty*3, 6, 7, 8, 9] 5 2 2 5 3 5 [1, 2, 3, empty*2, 5, 6, 7, 8, 9] 6 2 1 4 3 4 [1, 2, 3, empty*1, 4, 5, 6, 7, 8, 9] 7 1 1 3 3 2 [1, 2, 3, 3, 4, 5, 6, 7, 8, 9] 8 0 1 2 2 2 [1, 2, 2, 3, 4, 5, 6, 7, 8, 9]
在有序数组中查找目标元素索引
function search(arr, num) {
var start = 0, end = arr.length - 1;
while (start <= end) {
var mid = Math.floor((start + end) / 2);
if (num < arr[mid]) end = mid - 1;
else if (num > arr[mid]) start = mid + 1;
else return mid;
}
return -1;
}
取中间值,判断目标元素是在中间值的左边还是右边,对开始索引和结束索引进行更改
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。