查找插入位置

Search Insert Position

Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.
You may assume no duplicates in the array.
Here are few examples.
[1,3,5,6], 5 → 2
[1,3,5,6], 2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6], 0 → 0

题目大意

给定一个排好序的数组和一个目标值,如果能找到目标值,就返回这个索引。如果不能找到,就返回如果把这个值按需插入的话应该在的位置的索引。

思路

  • 暴力搜索
    从左到右搜索,如果找到这个值,就返回索引值;如果查找到比这个值大的值了,说明没有这个值,并且如果把这个值插入的话就插入在这个位置,就返回这个索引;如果查询到最后一个还小于目标值,说明应该把目标值插入到当前最后一个值的下一个索引位置。时间复杂度为O(N)。
  • 二分查找
    用二分查找法进行查找,如果查找到就返回查找到的索引位置,如果查找不到就把left索引返回,即为需要插入的位置。时间复杂度为O(log2n)。

代码

#include<iostream>
using namespace std;
// 暴力查找法
int searchInsert_1(int A[], int n, int target)
{
    for(int i=0; i<n; i++)
    {
        if(A[i] == target) return i;
        if(A[i] > target) return i;
        if(A[i] < target && i == (n-1)) return n;
    }
    return -1;
}
// 二分查找法
int searchInsert(int A[], int n, int target)
{
    int l=0,r=n-1;
    while(l<=r)
    {
        int mid = (l+r)/2;
        if(A[mid] == target)return mid;
        if(A[mid] > target) r = mid-1;
        if(A[mid] < target) l = mid+1;
    }
    return l; // left索引即为需要插入的索引位置
}
int main()
{
    int A[]={1,3,5,6};
    int target=5;
    cout<<searchInsert(A, 4, target)<<endl;

    target=2;
    cout<<searchInsert(A, 4, target)<<endl;

    target=7;
    cout<<searchInsert(A, 4, target)<<endl;

    target=0;
    cout<<searchInsert(A, 4, target)<<endl;
    return 0;
}

运行结果

运行结果

  • 以上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值