前言
之前曾报名过“代码随想录算法训练营十一期”,总共60天,坚持到第30天,基本涉及到了大部分的题型,包括数组、链表、哈希表、字符串、栈与队列、二叉树和回溯算法。动态规划自己之前单独刷过专题,也算了解基本的方法。贪心算法和单调栈了解的不多,这次补上。
现在马上要面临秋招,又重新报名了卡哥的代码随想录算法训练营,没想到都开到第十七期了。希望跟着这次算法训练营的进度,复习之前刷过的内容,查漏补缺,备战秋招!
代码随想录
主要是两个重点:
- 数组下标都是从0开始的
- 数组内存空间的地址是连续的
704. 二分查找 - 力扣(LeetCode)
一次AC,整体还是比较顺畅的,主要是明确自己用的是“左闭右开”还是“左闭右闭”
class Solution:
def search(self, nums: List[int], target: int) -> int:
l = 0
r = len(nums)
index = -1
# 左闭右开写法
while l < r:
mid = (l+r) // 2
if nums[mid] == target:
index = mid
break
elif nums[mid] > target:
r = mid
else:
l = mid + 1
return index
27. 移除元素 - 力扣(LeetCode)
使用快慢指针一次AC
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
slow = 0
for fast in range(len(nums)):
if nums[fast] != val:
nums[slow] = nums[fast]
slow += 1
return slow
总结
- 万事开头难,打好了头阵,后面继续加油
- 二分法和快慢指针基本还记得,夸夸自己
- 乘以二以及除以二可以用位移运算,乘以二是<<1,除以二是>>1