comments: true
edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20068.%20%E6%9F%A5%E6%89%BE%E6%8F%92%E5%85%A5%E4%BD%8D%E7%BD%AE/README.md
剑指 Offer II 068. 查找插入位置
题目描述
给定一个排序的整数数组 nums
和一个整数目标值 target
,请在数组中找到 target
,并返回其下标。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n)
的算法。
示例 1:
输入: nums = [1,3,5,6], target = 5 输出: 2
示例 2:
输入: nums = [1,3,5,6], target = 2 输出: 1
示例 3:
输入: nums = [1,3,5,6], target = 7 输出: 4
示例 4:
输入: nums = [1,3,5,6], target = 0 输出: 0
示例 5:
输入: nums = [1], target = 0 输出: 0
提示:
1 <= nums.length <= 104
-104 <= nums[i] <= 104
nums
为无重复元素的升序排列数组-104 <= target <= 104
注意:本题与主站 35 题相同: https://leetcode.cn/problems/search-insert-position/
解法
方法一
Python3
import bisect as bi
class Solution:def searchInsert(self, nums: List[int], target: int) -> int:pos=bi.bisect_left(nums,target)return posclass Solution:def searchInsert(self, nums: List[int], target: int) -> int:left, right = 0, len(nums)-1while left <=right:mid = (left + right) >> 1if nums[mid] >= target:right = mid-1else:left = mid + 1return left
Java
class Solution {public int searchInsert(int[] nums, int target) {int left = 0, right = nums.length;while (left < right) {int mid = (left + right) >>> 1;if (nums[mid] >= target) {right = mid;} else {left = mid + 1;}}return left;}
}
C++
class Solution {
public:int searchInsert(vector<int>& nums, int target) {int left = 0, right = nums.size();while (left < right) {int mid = left + right >> 1;if (nums[mid] >= target)right = mid;elseleft = mid + 1;}return left;}
};
Go
func searchInsert(nums []int, target int) int {left, right := 0, len(nums)for left < right {mid := (left + right) >> 1if nums[mid] >= target {right = mid} else {left = mid + 1}}return left
}
JavaScript
/*** @param {number[]} nums* @param {number} target* @return {number}*/
var searchInsert = function (nums, target) {let left = 0;let right = nums.length;while (left < right) {const mid = (left + right) >> 1;if (nums[mid] >= target) {right = mid;} else {left = mid + 1;}}return left;
};
Swift
class Solution {func searchInsert(_ nums: [Int], _ target: Int) -> Int {var left = 0var right = nums.countwhile left < right {let mid = (left + right) / 2if nums[mid] >= target {right = mid} else {left = mid + 1}}return left}
}