【Leetcode解題】704. Binary Search
題目
- 題目連結
- 目標函式 :
search(nums, target)- Input :
nums: List[int]、target: int - Output :
int
- Input :
解題概念
- 題意 : 給予按升序排序的整數陣列
nums和一整數target - 如果
target存在nums中,則返回其 index value,不然回傳-1 - 時間複雜度要求 : $\color{DB4D6D}{O(\log(n))}$
我的寫法
- 想法 : 這題就是標準的 Binary Search 題型,我這裡使用了 Iteration 的寫法
- 程式碼 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16def search(self, nums, target):
left = 0
right = len(nums) - 1
while left <= right:
mid = (left + right) // 2
if nums[mid] == target:
return mid
elif nums[mid] > target: # target 位於 nums[left] 與 nums[mid] 之間
right = mid - 1
else: # target 位於 nums[mid] 與 nums[right] 之間
left = mid + 1
return -1 - 成效 :
- Time Complexity : $\color{DB4D6D}{O(\log(n))}$
- Runtime: 205 ms (faster than 64.40%)
- Memory Usage: 14.4 MB (more than 90.68%)
解答 or 其他優秀寫法 - Recursion 版本
- 想法 : 此為 Binary Search 的另一種寫法
- 程式碼 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18def search(self, nums, target):
def binarySearch(left, right):
if left <= right :
mid = (left + right) // 2
if nums[mid] == target:
return mid
elif nums[mid] > target:
return binarySearch(left, mid - 1)
else:
return binarySearch(mid + 1, right)
return -1
l = 0
r = len(nums) - 1
return binarySearch(l, r) - 成效 :
- Time Complexity : $\color{DB4D6D}{O(\log(n))}$
- Runtime: 219 ms (faster than 7.83%)
- Memory Usage: 20.6 MB (more than 7.34%)
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Robin's Tech Blog!


