704.二分查找
题目链接: . - 力扣(LeetCode)
文档讲解: 代码随想录(programmercarl.com)
题目:给定一个 n
个元素有序的(升序)整型数组 nums
和一个目标值 target
,写一个函数搜索 nums
中的 target
,如果目标值存在返回下标,否则返回 -1
。
思路:在一个范围内找target,保持这个范围的开合状态不变,每次取中间元素和target比较,如果大于target就取左区间,如果小于就取右区间.
开合状态如果左闭右闭,用 while(l<=r) , l==r 时没有错误;
开合状态如果左闭右开,用 while(l<r) , l==r 时有错误(不存在);
35.搜索插入位置
题目链接: 35. 搜索插入位置 - 力扣(LeetCode)
文档讲解: 代码随想录(programmercarl.com)
题目: 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n)
的算法。
思路:比二分查找多了一个找不到的情况下应该插入的位置,就查找到最后的结果分析,当目标元素小于nums[0]时,最后l为0,r为-1. 其他情况下都是l最后变成mid+1,应该插入的位置,所以最后返回l即可;
27.移除元素
题目链接: . - 力扣(LeetCode)
文档讲解: 代码随想录
题目:
给你一个数组 nums
和一个值 val
,你需要 原地 移除所有数值等于 val
的元素。元素的顺序可能发生改变。然后返回 nums
中与 val
不同的元素的数量。
假设 nums
中不等于 val
的元素数量为 k
,要通过此题,您需要执行以下操作:
- 更改
nums
数组,使nums
的前k
个元素包含不等于val
的元素。nums
的其余元素和nums
的大小并不重要。 - 返回
k.
看不懂题目,看实例看懂的,就是把除了目标元素外的都移到前面,目标元素不管.
思路:利用数组覆盖的特性,数组元素不能单个删除.
用双指针,把两个for循环变成一个for,用快慢两个指针,快指针遍历找寻元素,慢指针作为最终数组的下标.