LintCode 簡單 60 搜尋插入位置

2021-10-09 01:43:01 字數 1488 閱讀 7441

1.問題描述:

給定乙個排序陣列和乙個目標值,如果在陣列中找到目標值則返回索引。如果沒有,返回到它將會被按順序插入的位置。

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

2.樣例:

[1,3,5,6],5 → 2

[1,3,5,6],2 → 1

[1,3,5,6], 7 → 4

[1,3,5,6],0 → 0

3.**:

我實現的方法,有點複雜

class solution:

"""@param a: an integer sorted array

@param target: an integer to be inserted

@return: an integer

"""def searchinsert(self, a, target):

# write your code here

if a == or target <= a[0]:

return 0

for i in range(1, len(a)):

if a[i] == target or a[i - 1] < target and target < a[i]:

return i

elif target > a[i] and i + 1 == len(a):

return i + 1

另外看到乙個更加簡便的方法,使用enumerate來迭代a

def searchinsert2(self, a, target):

# write your code here

if len(a) == 0:

return 0

for i, num in enumerate(a):

if target <= num:

return i

return len(a)

本題的挑戰難度是實現o(log(n)) 時間複雜度。非常明顯是需要用二分法來實現,並且題目已知是乙個有序的陣列,所以可以使用二分搜尋。

def searchinsert3(self, a, target):

left, right = 0, len(a) - 1 # 初始化左右端點位置

while left <= right: # 當條件合法時

mid = left + (right - left) // 2 # 獲取中點,如果是偶數取靠左的位置

if a[mid] == target: # 找到該數

return mid # 直接返回

elif a[mid] > target: # 如果當前位置數比插入值大

right = mid - 1 # 更新右端點

else: # 如果當前位置數比插入值小

left = mid + 1 # 更新左端點

return left # 返回插入位置,這裡是左端位置

LintCode 搜尋區間

題目 給定乙個包含 n 個整數的排序陣列,找出給定目標值 target 的起始和結束位置。如果目標值不在陣列中,則返回 1,1 樣例 給出 5,7,7,8,8,10 和目標值target 8,返回 3,4 思路 用二分法分別查詢出目標值的左右邊界。查詢左邊界時a r 永遠大於等於target,a p...

單詞搜尋 LintCode

給出乙個二維的字母板和乙個單詞,尋找字母板網格中是否存在這個單詞。單詞可以由按順序的相鄰單元的字母組成,其中相鄰單元指的是水平或者垂直方向相鄰。每個單元中的字母最多只能使用一次。樣例 給出board abce sfcs adee word abcced 返回 true,word see 返回 tru...

搜尋區間 LintCode

描述 給定乙個包含 n 個整數的排序陣列,找出給定目標值 target 的起始和結束位置。如果目標值不在陣列中,則返回 1,1 樣例 給出 5,7,7,8,8,10 和目標值target 8,返回 3,4 挑戰 時間複雜度 o log n 思路 ifndef c61 h define c61 h i...