第一天任务:
数组理论基础,704. 二分查找,27. 移除元素
704. 二分查找
题目链接:https://leetcode.cn/problems/binary-search/
思路:将一个下标区间分成两半,中间是middle,左右分别是left, right。middle的数值是左右数值相加 //2 (取整)。
1) 左闭右闭: right = len(nums)-1。 当target < middle的值, 区间调整为 [left, middle-1];当 target > middle的值, 区间调整为 [middle+1, right];当 target = middle的值,返回middle。否则,target不存在,返回-1。
2)左闭右开:right = len(nums),left<right, [left, middle), [middle+1, right)
1) 左闭右闭
2) 左闭右开
3) Python enumerate() 函数
解释:https://www.runoob.com/python/python-func-enumerate.html
4)一行秒杀(目前还看不懂)
https://leetcode.cn/problems/binary-search/solutions/1927534/by-qghappywish-bv59/
27. 移除元素
题目链接:https://leetcode.cn/problems/remove-element/
思路:双指针法,f=快指针,s=慢指针,因为要原地移除元素,所以需要再痛一个数组里操作。快指针需要遍历数组,把 !=val 的值赋给慢指针,直到循环完。返回s.
如果想返回新数组, 下一步就是把剩下的 = val 的值,用pop的方法弹出,就得到了新的数组。索引较复杂,len(nums)-1 是旧的数组最后一位,步数为-1, 往回倒到 s-1 ,但不包括s-1 。
1)双指针法
2)还不理解