704. 二分查找
题目链接
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
视频讲解
手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找_哔哩哔哩_bilibili
笔记
- 我代码的区间是左闭右开的,因此注意更新右端点的时候可以取mid,更新左端点的时候是mid+1
- while循环的判断条件:只要符合条件的进循环,不符合的情况就出去,边界的时候带入相关值考虑一下
Python代码
class Solution:
def search(self, nums: List[int], target: int) -> int:
left = 0
right = len(nums) # 左闭右开的区间
while(left < right): # 右边是开区间,不能取等都是合法的
mid = (left + right) // 2
if nums[mid] > target:
right = mid
elif nums[mid] < target:
left = mid + 1
else:
return mid
return -1
27. 移除元素
笔记
- 关键思想是快指针fast指向满足条件的数组元素,也就是快指针遇到不等于目标值的时候才对数组做操作,如果指向的值等于要删除的目标值,那么指针往后移,不做操作
- 慢指针slow是满足条件数组的下标
- 返回的数组长度也就是慢指针slow的值,因为满足条件的数组的长度还是原数组的长度,因此不能返回len(nums)
Python代码
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
fast = 0 # 指向满足条件的数组元素
slow = 0 # 满足条件的数组的下标
for fast in range(len(nums)):
if(nums[fast] != val):
nums[slow] = nums[fast]
slow += 1
return slow