35. 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 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
二分查找
1 class Solution { 2 /** 3 * 使用二分查找算法在有序数组中寻找目标值的索引位置 4 * 如果目标值存在于数组中,则返回其索引位置 5 * 如果目标值不存在于数组中,则返回按插入顺序应插入的目标值的索引位置 6 * 7 * @param nums 一个有序的整数数组 8 * @param target 需要查找的目标值 9 * @return 目标值的索引位置或应插入的位置 10 */ 11 public int searchInsert(int[] nums, int target) { 12 // 初始化左右指针,分别指向数组的起始和结束位置 13 int left = 0, right = nums.length - 1; 14 15 // 当左指针不大于右指针时,执行二分查找 16 while (left <= right) { 17 // 计算中间位置,避免整数溢出的风险 18 int mid = (left + right) / 2; 19 20 // 如果中间位置的值等于目标值,直接返回中间位置 21 if (nums[mid] == target) { 22 return mid; 23 } else if (nums[mid] < target) { 24 // 如果中间位置的值小于目标值,调整左指针到中间位置的右侧 25 left = mid + 1; 26 } else { 27 // 如果中间位置的值大于目标值,调整右指针到中间位置的左侧 28 right = mid - 1; 29 } 30 } 31 32 // 如果没有找到目标值,返回按插入顺序应插入的目标值的索引位置 33 return left; 34 } 35 }
                    
                
                
            
        
浙公网安备 33010602011771号