Link: https://leetcode.com/problems/search-insert-position/
Content:
Method 1: linear
Algorithm: It has four situations
- no elements ---- return 0
- nums[0] > target ---- return 0
- nums[-1] < target ---- return len(nums)
- traverse the whole array, if nums[i] >= target: return i
Code:
class Solution(object):
def searchInsert(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
if nums == None or nums[0] > target:
return 0
elif nums[-1] < target:
return len(nums)
else:
for i in range(len(nums)):
if nums[i] >= target:
return i
break
Time Complexity:
O(N)
Method 2: Binary Search
难点: 二分法的边界, left与right的关系,以及return什么
Code:
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
if len(nums) == 0:
return 0
else:
left = 0
right = len(nums) - 1
while left <= right:
mid = (left + right)//2
if target == nums[mid]:
return mid #nums中有target
elif target > nums[mid]:
left = mid + 1
else:
right = mid - 1
return left #nums中没有target
Time Complexity:
O(logN)