搜索插入位置

搜索插入位置

CategoryDifficultyLikesDislikes
algorithmsEasy (45.04%)1970-

Tags

array | binary-search

Companies

Unknown

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

请必须使用时间复杂度为  O(log n)  的算法。

示例 1:

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

示例  2:

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

示例 3:

1
2
输入: nums = [1,3,5,6], target = 7
输出: 4

提示:

  • 1 <= nums.length <= 104
  • -104 <= nums[i] <= 104
  • nums  为  无重复元素 的  升序 排列数组
  • -104 <= target <= 104

Discussion | Solution

解法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
struct Solution;

// @lc code=start
impl Solution {
    /// ## 解题思路
    /// - 二分查找
    /// * 注意边界条件
    pub fn search_insert(nums: Vec<i32>, target: i32) -> i32 {
        let (mut l, mut r) = (0, nums.len() - 1);
        // 边界条件
        if target > nums[r] {
            return (r + 1) as i32;
        }
        // 二分查找
        while l < r {
            let m = l + (r - l) / 2;
            if nums[m] == target {
                return m as i32;
            } else if nums[m] < target {
                l = m + 1;
            } else {
                r = m;
            }
        }

        return l as i32;
    }
}
// @lc code=end
updatedupdated2024-08-252024-08-25