搜索插入的位置

警幻仙子
• 阅读 453

给定一个排序数组一个目标值

  1. 在数组中找到目标值,并返回其索引
  2. 如果目标值不存在于数组中,返回它将会按顺序插入的位置

eg:输入[1,3,5,6],5
输出:2

输入[1,3,5,6],2
输出:1

输入[1,3,5,6],7
输出:4

方法1:for循环遍历;
时间复杂度:O(n)

function findTheInsert(arr, value) {
    for (let i = 0; i < arr.length; i++) {
        if (arr[i] >= value) {
            return i
        }
    }
    return arr.length
}

let arr = [1, 3, 5, 6]
let value1 = 2
console.log(findTheInsert(arr, value1))

方法2:二分查找;
时间复杂度:O(logn)

function binarySearch(arr, value) {
    let minIndex = 0
    let maxIndex = arr.length - 1
    let middleValue

    while (minIndex <= maxIndex) {
        let middleIndex = Math.floor((minIndex + maxIndex) / 2)
        middleValue = arr[middleIndex]
        if (value < middleValue) {
            maxIndex = middleIndex - 1
        } else if (value > middleValue) {
            minIndex = middleIndex + 1
        } else {
            return middleIndex
        }
    }

    return minIndex
}

let arr = [1, 3, 5, 6]
let value1 = 2
console.log(binarySearch(arr, value1))
点赞
收藏
评论区
推荐文章
先知 先知
4年前
C 语言代码大全
1两个数组的合并题目描述已知数组a中有m个按升序排列的元素,数组b中有n个按降序排列的元素,编程将a与b中的所有元素按降序存入数组c中。输入输入有两行,第一行首先是一个正整数m,然后是m个整数;第二行首先是一个正整数n,然后是n个整数,m,n均小于等于1000000。输出输出合并后的mn个整数,数据之间用空格隔开。输出占一行。样例输入4
Stella981 Stella981
4年前
PHP返回Json数据函数封装
/返回Json数据@paramint$code@paramstring$message@paramarray$data@returnstring/publicfunctionretJson($code,$message'
Wesley13 Wesley13
4年前
PHP签名
<?phpclassSign{/获取数据签名@paramarray$param签名数组@paramstring$code安全校验码@param
Stella981 Stella981
4年前
JSONArray数据转换成java List
<divid"cnblogs\_post\_body"class"blogpostbody"<p<spanstyle"fontsize:18pt"1.后台接收json数组转成封装实体类的List:</span</p<divclass"cnblogs\_code"<divclass"cnblogs\_code\_tool
Wesley13 Wesley13
4年前
Java面试总结(排序算法)
1.冒泡排序算法描述:两两比较,大的放后面2.选择排序算法描述:在m元数组中找到最小值的位置,然后将最小值的位置和第n(n0,1,2,....m1)位的值对调,排序k次则m元数组中前k(k<m)位的值已经排序好,m元数组中前k位的值不需要再进行排序,此时需要排序的元素只有mk个3.插入排序算
Stella981 Stella981
4年前
LeetCode:(14. 最长公共前缀!!!!!)
题目:14\.最长公共前缀编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串“”。示例1:输入:\“flower”,“flow”,“flight”\输出:“fl”示例2:输入:\“dog”,“racecar”,“car”\输出:“”
Stella981 Stella981
4年前
LeetCode:283.移动零——简单
题目:283.移动零:给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入:0,1,0,3,12输出:1,3,12,0,0说明:1.必须在原数组上操作,不能拷贝额外的数组。2.尽量减少操作
Stella981 Stella981
4年前
Leetcode724:寻找数组的中心索引(java、python3)
寻找数组的中心索引给定一个整数类型的数组nums,请编写一个能够返回数组\\“中心索引”\\的方法。我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。如果数组不存在中心索引,那么我们应该返回1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。
Wesley13 Wesley13
4年前
C语言利用动态数组实现顺序表(不限数据类型)
实现任意数据类型的顺序表的初始化,插入,删除(按值删除;按位置删除),销毁功能。、顺序表结构体  实现顺序表结构体的三个要素:(1)数组首地址;(2)数组的大小;(3)当前数组元素的个数。1//顺序表结构体2structDynamicArray{3voidaddr;//指向数组的首地址(
菜园前端 菜园前端
2年前
什么是顺序搜索?
原文链接:什么是顺序搜索?顺序搜索是一种比较低效的搜索算法,但是实现起来相对简单。主要步骤如下:1.遍历数组2.找到跟目标值相等的元素,就返回它的下标3.遍历结束后,如果没有搜索到目标值,则返回1基础案例时间复杂度:O(n)空间复杂度:O(1)javasc
菜园前端 菜园前端
2年前
什么是二分搜索?
原文链接:什么是二分搜索?二分搜索是一种比较高效的搜索算法,但前提必须是有序数组。主要步骤如下:1.从数组的中间元素开始,如果中间元素正好是目标值,则搜索结束2.如果目标值大于或者小于中间元素,则在大于或者小于中间元素的那一半数组中继续二分搜索基础案例时间
警幻仙子
警幻仙子
Lv1
想要忘记那么多过往偏偏清醒到荒唐
文章
4
粉丝
0
获赞
0