JavaScript 合并两个有序数组, 在有序数组中查找目标元素索引

斧王
• 阅读 1055

合并两个有序数组


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;
}

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

点赞
收藏
评论区
推荐文章
好买-葡萄 好买-葡萄
3年前
【数据结构与算法】—— 二分查找
1.二分查找的概念二分查找指的是在排好序的数组中,找到目标元素。如果元素存在则返回元素的下标,不存在则返回1.下面以升序为例进行简单描述2.查找过程:取数组中间元素与查找元素target比较。如果target等于中间元素则直接返回中间元素的下标,如果target小于数组中间元素则在数组左边查找,如果target大于数组中间元素则在右边查找。重复以上步骤。
先知 先知
4年前
C 语言代码大全
1两个数组的合并题目描述已知数组a中有m个按升序排列的元素,数组b中有n个按降序排列的元素,编程将a与b中的所有元素按降序存入数组c中。输入输入有两行,第一行首先是一个正整数m,然后是m个整数;第二行首先是一个正整数n,然后是n个整数,m,n均小于等于1000000。输出输出合并后的mn个整数,数据之间用空格隔开。输出占一行。样例输入4
九路 九路
4年前
7 二分搜索树的原理与Java源码实现
1折半查找法了解二叉查找树之前,先来看看折半查找法,也叫二分查找法在一个有序的整数数组中(假如是从小到大排序的),如果查找某个元素,返回元素的索引。如下:intarrnewint{1,3,4,6,8,9};在arr数组中查找6这个元素,查到返回对应的索引,没有找到就返回1思想很简单:1先找到数组中间元素ta
九路 九路
4年前
二分查找法的递归和非递归的实现
//二分查找法非递归实现,在一个有序的数组中查找e元素的位置,找不到返回1publicstaticintbinarySearch(intdata,inte){intl0;intrdata.length1;while(l<r){
Wesley13 Wesley13
3年前
JS 两个对象数组合并并去重
JS两个对象数组合并并去重<!DOCTYPEhtml<html<head<metacharset"utf8"<title</title</head<body</body</htm
Wesley13 Wesley13
3年前
C语言自学《五》
什么是数组数组是一组数目固定、类型相同的数据项数组中的数据称为元素比如longnumbers\10\;方括号中的数字定义了要存放在数组中的元素个数,称为数组维度数组有一个类型,它组合了元素的类型和数组中的元素个数,因此如果两个数组的元素个数、类型相同,这两个数组的类型就相同可以在数组名称后的方括号内使用索引值,索引值是从0开始
Wesley13 Wesley13
3年前
PHP二维数据排序,二维数据模糊查询
一、因为项目中的一个报表需要合并三个表的数据,所以分表查询再合并数据,利用PHP数组函数进行排序,搜索。三表合并后的数组结构如下:Array(0Array(history_id12sla_group_
Wesley13 Wesley13
3年前
Union Find
并查集是在各个不相交集合中查找某元素存在否,可以接近常数级查找例如,图的连通性,最近公共祖先等问题。一般用森林数组实现。一般有2个操作,查找(find)和合并(union)查找:从集合中查找元素x是否存在。合并:如果2个集合不想交则可以合并操作,一般方法是高度低的合并到高度高的。初始化每个元素都可以是一个单独的集合,然后不断引入关系来合并他
Stella981 Stella981
3年前
Javascript数组系列一之栈与队列
所谓数组(英语:Array),是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。---百度百科简单理解,数组就是数据的有序列表。Array在Javascript中属于最常用的数据类型之一了,与其它语言一样Javascript中的数
菜园前端 菜园前端
1年前
什么是归并排序?
原文链接:什么是归并排序(mergeSort)?主要分成两部分实现,分、合操作:分:把数组分成两半,在递归地对子数组进行"分"操作,直到分成一个个单独的数合:把两个数组合并为有序数组,再对有序数组进行合并,直到全部子数组合并为一个完整数组归并排序就是采用了
菜园前端 菜园前端
1年前
什么是二分搜索?
原文链接:什么是二分搜索?二分搜索是一种比较高效的搜索算法,但前提必须是有序数组。主要步骤如下:1.从数组的中间元素开始,如果中间元素正好是目标值,则搜索结束2.如果目标值大于或者小于中间元素,则在大于或者小于中间元素的那一半数组中继续二分搜索基础案例时间
斧王
斧王
Lv1
远上寒山石径斜,白云深处有人家。
文章
3
粉丝
0
获赞
0