算法训练 Day01

34 阅读1分钟

一直都很想系统学习算法,但是一直都是一天打鱼,两天晒网的状态。这次终于下定决心加入代码随想录算法训练营。也不知道自己能否坚持到结束。

算法Github

704. 二分查找

在区间搜索的时候,首先对区间的定义一定要明确。区间的定义是:左闭右闭[left, right]左闭右开[left, right)

注意: 循环不变量原则,即:边界的规则要统一

总结: 在写二分法时,边界的规则都是根据区间的定义【左闭右闭[left, right] 或 左闭右开[left, right)】来的,开始区间的定义了什么,就决定了之后的边界应该如何去写。

704.jpg

代码

27. 移除元素

注意:数组中的元素不能删除,只能覆盖。相当于要删除一个元素,就要数组从后向前把每个元素做一个覆盖的过程。

暴力实现大体思想: 2层 for 循环。比如:假如我们要删元素X。用一个 for 循环去循环一个数组,在遇到元素X时,就再用一个 for 循环把后面的元素一个一个的向前覆盖。

双指针思路: 用一个O(n) 的方式实现。用一层 for 循环 做 两层 for 循环的事。其中, 快指针: 指向新数组所需要的元素(新数组:即删除目标值之后的数组); 慢指针: 指向新数组中需要更新的位置,即:新数组的下标值。

27.jpg

代码