代码随想录算法训练营第一天| 数组理论基础 | LeetCode704. 二分查找 | LeetCode27. 移除元素
一、二分查找
题目链接
https://leetcode.cn/problems/binary-search/
文章讲解(转载自代码随想录)
https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html
视频讲解(转载自代码随想录)
https://www.bilibili.com/video/BV1fA4y1o715
题目条件
1、有序数组
2、无重复元素
思路
二分算法使用一个while循环和一个left索引、一个right索引、一个middle索引,通过不断判断数组中间元素nums[middle]和要查找的值target之间的大小关系,来更新区间范围,直到nums[middle]=target时查找到,否则没有查找到。
左闭右闭二分法易错点
更新left和right时:
left = middle + 1;
right = middle - 1;
同时注意若while循环没有找到匹配的元素,返回 -1.
二、移除元素
题目链接:
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
题目条件
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。
思路
双指针法,使用一个for循环,利用一个快索引和一个慢索引,快索引可以在for循环中定义,用来遍历每一个元素,并且将每一个元素和目标值比较,若二者相等,则将快指针指向的元素赋值给满指针指向的位置,再将快慢指针加1,若二者不相等,则快指针+1。直到遍历完所有元素。
易错点
略。