01天【代码随想录算法训练营34期】 第一章 数组part01 (704. 二分查找、 27. 移除元素)
704. 二分查找
-
先选是[low, high]还是[low, high)还是(low, high]
-
下面选择[]
-
"while (low <= high)"还是"while (low < high)"
因为[1,1]合法,所以是<=(什么是不合法呢,比如说[2,1]) -
"high = mid - 1"还是"high = mid"
这个情况,我们已知nums[mid] > target,所以下一个区间不能包含mid,所以high = mid-1
class Solution(object):
def search(self, nums, target):
low = 0
high = len(nums) - 1
while (low <= high):
mid = (high + low) // 2
if nums[mid] == target:
return mid
elif nums[mid] > target:
high = mid - 1
else:
low = mid + 1
return -1
Complexity: O(log(n))
27. 移除元素
快慢指针
class Solution(object):
def removeElement(self, nums, val):
i = 0
j = 0
while j < len(nums):
if (nums[j] != val):
nums[i] = nums[j]
i += 1
j += 1
return i
Complexity: O(n)