数组 part01
重要知识点:
1. 数组是存放在连续内存空间上的相同类型数据的集合。
数组下标都是从0开始的
数组内存空间的地址是连续的(二维数组地址也是连续的一条直线)
正是因为数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址
2. 数组的元素是不能删的,只能覆盖。
704.二分查找
这一题较为基础,使用二分法,缩小边界即可。自己就可以轻松搞定。
思路:
先确定左右边界,左边界即是0, 右边界就是这个数组的最末端。
然后就是while循环。while循环需要注意的是:while (left <= right)!!! 如果只是<的话,会遗漏一部分。
while循环里面的条件就是如果nums[mid] == target 就返回当前的mid。否则就是left = mid + 1,或者right = mid - 1。这里可以是mid+1或者是mid-1的主要原因是要找到目标值,只要不是目标值都可以
最后跳出循环如果没有找到target这个值,就要返回-1. 所以最后是return -1。
看完老师的讲解视频后明白自己写的这个是左闭右闭的写法,左闭右开的写法也要熟悉。
27. 移除元素
在看完题后,自己并没有想到可以使用快慢指针(双指针)的方法。
错误思路:希望数组重新排列,然后找到目标值的左右边界,然后和数组位于最后的元素进行换位。实际尝试后发现,非常难实现,需要考虑多个边界。
快慢指针确实很好用,慢指针停在需要替换的元素上面,快指针到后面找不是val的数字替换过来。