leecode704 二分查找
题目链接:https://leetcode.cn/problems/binary-search/
学习文章:https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html#_704-%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE
视频链接:
https://www.bilibili.com/video/BV1fA4y1o715
- 二分查找之前做过。知道思路写起来很快。边界条件确实没搞清楚。每次通过debug调好。。。看了学习视频,恍然大悟,总结要点如下。
- target 在区间[left, right],左闭右闭里时,注意:
while (left <= right)//含等于号
if(nums[middle] > target){
right = middle-1; // 在左区间,在[left, middle-1]中
}else if(nums[middle] < target){
left = middle+1 //在右区间,在[middle+1, right]中
}
- target 在区间[left, right),左闭右开里时,注意:
while (left < right)//不含等于号
if(nums[middle] > target){
right = middle; // 在左区间,在[left, middle)中
}else if(nums[middle] < target){
left = middle+1 //在右区间,在[middle + 1, right)中
}
时间复杂度:O(logn)
空间复杂度:O(1)
leecode27 移除元素
题目链接:https://leetcode.cn/problems/remove-element/
文章讲解:https://programmercarl.com/0027.%E7%A7%BB%E9%99%A4%E5%85%83%E7%B4%A0.html
视频讲解:https://www.bilibili.com/video/BV12A4y1Z7LP
- 注意点:采用双指针(快慢指针)
慢指针:指向更新 新数组下标的位置(最后一个元素的位置)
快指针:用于指向新数组的元素。
此题配合动画更容易理解。
时间复杂度:O(n)
空间复杂度:O(1)