111.数组特点:
1.
数组是存放在连续内存空间上的相同类型数据的集合。
2.
数组的元素是不能删的,只能覆盖。
3
.
数组下标都是从0开始的。
4.
数组内存空间的地址是连续的。
704. 二分查找
题目链接:. - 力扣(LeetCode)
前提:数组为有序数组、数组中无重复元素
两种区间:
左闭右闭即[left, right],
因为定义target在[left, right]区间,所以有如下两点:
- while (left <= right) 要使用 <= ,因为left == right是有意义的,所以使用 <=
- if (nums[middle] > target) right 要赋值为 middle - 1,因为当前这个nums[middle]一定不是target,那么接下来要查找的左区间结束下标位置就是 middle - 1
左闭右开即[left, right),
有如下两点:
- while (left < right),这里使用 < ,因为left == right在区间[left, right)是没有意义的
- if (nums[middle] > target) right 更新为 middle,因为当前nums[middle]不等于target,去左区间继续寻找,而寻找区间是左闭右开区间,所以right更新为middle,即:下一个查询区间不会去比较nums[middle]
个人心得:把middle想成一侧的网(left和right用来调节他的位置),target是我们要包围的目标当middle>target,说明middle偏右我们就要把right-1这样才能让middle处在正确的位置。
想不明白看看图也是好的
代码实现:
可以说是困难重重了,看到题目没什么头绪,看了文档就明白啦!
之前连怎么写交互都不知道,今天算是让我学会啦
左闭右开跟左闭右闭差了等于号还有减一,我个人的思路决定左闭右闭比较顺
结果在这里了,好有成就感
27. 移除元素
题目链接:. - 力扣(LeetCode)
小贴士:去除val元素,别忘了 移动紧随其后的其他元素位置
要知道数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖!!!
一、暴力解法(笨)
也是很暴力的,遇到val,直接把后一个元素挪过来
实操实操:
二、双指针法(聪明)
双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
- 快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
- 慢指针:指向更新 新数组下标的位置
可以理解为慢指针等着快指针给它养老(这是可以说的嘛)
基操基操:
能想出这个方法的真的是个天才
结果结果:
第一天完结撒花