每日LeetCode 搜尋插入位置

2022-06-13 08:21:11 字數 1603 閱讀 1996

描述:給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。

你可以假設陣列中無重複元素。

示例 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

解決方案:

1、我想大部分同學的思路基本是直接開始遍歷,開始查詢target了。對於不在list的數,首先將list排好序,遍歷list,並找出其中剛好大於target的值,插在其前面。**如下:

1

class

solution:

2def searchinsert(self, nums: list[int], target: int) ->int:

3if target in

nums:

4return

nums.index(target)

5else:6

nums.sort()

7 l =0

8for r in

nums:

9if target 10nums.insert(l, target)

11 l += 1

12return l

該**是可以實現上述功能的,但是我在提交時出現了超出執行時間的結果,主要早在於遍歷這一項,遍歷的時間複雜度為o(n),然而又在迴圈中使用了insert()函式,該函式的時間複雜度為o(n),使得該方法的時間複雜都成倍增長,因此並不是乙個非常好的演算法。

2、使用二分思想來解決:

二分思想,即一次取兩個值(一般為端點值),通過不斷的判斷target是否在兩個值之間來縮小範圍,直至找到該值。**如下:

1

class

solution:

2def searchinsert(self, nums: list[int], target: int) ->int:

3 size =len(nums)

4if size ==0:

5return

06 left =0

7 right =size

8while left 9 mid = (left + right) // 2

10if nums[mid] 11 left = mid + 1

12else

:13 right =mid

14return left

每日leetcode 插入區間

給出乙個無重疊的 按照區間起始端點排序的區間列表。在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊 如果有必要的話,可以合併區間 示例 1 輸入 intervals 1,3 6,9 newinterval 2,5 輸出 1,5 6,9 示例 2 輸入 intervals 1,2 3,...

每日一道 LeetCode 10 搜尋插入位置

每天 3 分鐘,走上演算法的逆襲之路。每日一道 leetcode 前文合集 github gitee 給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。你可以假設陣列中無重複元素。示例 1 輸入 1,3,5,6 5 輸出 2 示例...

搜尋插入位置 LeetCode

給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。你可以假設陣列中無重複元素。示例 1 輸入 1,3,5,6 5 輸出 2 示例 2 輸入 1,3,5,6 2 輸出 1 示例 3 輸入 1,3,5,6 7 輸出 4 示例 4 輸入...