数组理论基础:
心得:适用于C++
704.二分查找
题目链接:. - 力扣(LeetCode)
给定一个 n
个元素有序的(升序)整型数组 nums
和一个目标值 target
,写一个函数搜索 nums
中的 target
,如果目标值存在返回下标,否则返回 -1
。
文章讲解:代码随想录
视频讲解:手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找_哔哩哔哩_bilibili
心得:想用list.index(), 但是在找不到目标值的时候,这个函数会自动报错。
笔记:有序+无重复—>使用基本二分法的前提。二分法要点:理解区间的定义,在查找过程中保持不变量,关注边界。
第一种写法:左闭右闭
//向下取整
left + (right - left)//2 防溢出(python不需要)
第二种写法:左闭右开
27. 移除元素
题目链接:. - 力扣(LeetCode)
文章讲解:代码随想录
想法:你不需要考虑数组中超出新长度后面的元素。这是什么意思——可以只改len(new)的部分
重点:原地删除
暴力法:快慢指针法写的很快,但是暴力法一直写不对。有两个要点:1. N = len(list)要更新,不然会一直把后面重复的数向前移;2.列表移动之后外循环变量i不能向后走,因为新的list[i]还没检查。所以if [i] == val之后,需要先i-=1,然后再i+=1,确保i不变。总结:没事别用暴力法,看着暴力,其实事情一堆。
双指针法:——如果fast遇到值为val的元素,就跳过;否则赋值给slow并让slow前进一步