搜索插入位置

LeetCode第35题

题目描述:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

你可以假设数组中无重复元素。

示例 1:

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

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

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/search-insert-position

思路

采用二分法来做。注意边界条件的处理。

源代码

int searchInsert(int* nums, int numsSize, int target){
    //二分查找
    int mid = numsSize / 2;
    int begin = 0;
    int end = numsSize - 1;
    while(begin < end){
        if(target == nums[mid]){
            return mid;
        }
        else if(target < nums[mid]){
            end = (mid - 1) < 0 ? (0) : (mid - 1);
            mid = (begin + end) / 2;
        }
        else{
            begin = (mid + 1) < numsSize ? (mid + 1) :(numsSize - 1);
            mid = (begin + end) / 2;
        }
    }
    if(target <= nums[begin]){
        return begin;
    }
    else{
        return (end + 1);
    }
}

分析

时间复杂度为log级别,空间复杂度为常数级别。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的...
    FiveZM阅读 460评论 0 0
  • 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的...
    大鹅向东游阅读 179评论 0 0
  • 题目 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序...
    禾木清清阅读 150评论 0 0
  • 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的...
    仁安天下阅读 106评论 0 0
  • 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的...
    小象解答编程练习题阅读 384评论 0 1