1. 程式人生 > 其它 >35 搜尋插入位置

35 搜尋插入位置

技術標籤:# 二分專題javaleetcode演算法資料結構

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

思路:

在這裡插入圖片描述

check條件: 首先我們的check條件應該是找到第一個大於等於target的位置即check if (nums[mid] >= target)

更新: 更新時, if (nums[mid] >= target) 我們可以判斷結果位置應該在mid左邊而且包含mid如: r = mid

模板: 因此我們套用第一套模板(mid = l + r >> 1不用加1的那套)

邊界: 注意此題需要考慮特殊情況即當所有數都比target小的情況,此時退出的情況是l=r=nums.size()-1,明顯我們的結果應該在邊界+1的位置,因此當結果為nums.size()-1時需要特判一下,程式碼如下:

Java程式碼

class Solution {
    public int searchInsert(int[] nums, int
target) { if(nums == null || nums.length == 0) return 0; int l = 0,r = nums.length - 1; //找到第一個大於等於target的位置 while(l < r){ int mid = l + r >> 1; if(nums[mid] >= target) r = mid; else l = mid + 1; } //當所有數都比target小的情況,此時退出的情況是l=r=nums.size()-1,
//此時明顯我們的結果應該在邊界+1的位置,因此當結果為nums.size()-1時需要特判一下 if(l == nums.length - 1 && target > nums[l]) l++; return l; } }

在這裡插入圖片描述