合并两个有序数组


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. 获取数组1,数组2以及合并之后的数组的长度
  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;
}

取中间值,判断目标元素是在中间值的左边还是右边,对开始索引和结束索引进行更改


单细胞生物
83 声望0 粉丝

每一天不停地修炼,为了全新的冒险!