代码随想录训练营Day1:力扣704(二分查找);力扣27(移除元素)。

二分查找:代码随想录 (programmercarl.com)

由于我是算法小白,虽然这一部分之前刷过一遍,现在还是忘记了,我的刷题策略是直接看题解,把题解完全的看明白之后,再跟着敲代码所以就没有看见题目的第一想法。

看过卡哥的视频讲解之后我的印象更深了,之前刷的时候是直接看的代码随想录题解,没有看视频,如今再来看视频感觉比题解更加加清晰易懂,下面我就来说一说在视频和题解中我认为的一些重点。

代码随想录训练营Day1:力扣704(二分查找);力扣27(移除元素)。_第1张图片

使用前提:当看到1.有序数组,2.没有重复​​​元素的时候要想到二分查找的方法。

一个中心:二分查找的核心就是要确定数组的范围情况是左闭右闭【left,right】还是左闭右开

【left,right),再根据此分类来确定接下来的条件。

三个基本点

  • 根据之前确定的【】or【)来选择right初始值,若为【】由于可以取到最右边的值,则设为
  1. nums.size() - 1;

 若为【)则不能取到最右边的值,设为

 right = nums.size()
  •  根据之前确定的【】or【)来选择
 while (left <= or < right) 
当left==right,区间[left, right]依然有效,所以用 <=
当left==right,区间[left, right)无效,所以用 <
  • 重新确定边界时right=middle还是middle - 1. 

        若时【)的情况则right=middle,left=middle+1. 

 移除元素: 代码随想录 (programmercarl.com)

 本题使用了双指针法(快慢指针法)代码十分简洁,重点是理解快慢指针的作用。

快指针作用:便历数组,找到新数组需要的元素,(是找到,而不是遍历的每一个都是新数组需要的元素)

慢指针的作用:获取的是新数组在原来数组的基础上需要更新的位置。

之后要是忘记了的话,可以看看视频,卡哥演示的过程十分清楚。

今日总结:今天算法题加上博客大概写了两个小时左右,因为是之前做过的所以时间不长,之后花在算法上的时间肯定越来越多,但是不要把担心,有群的的各位一起讨论,相信我一定能坚持。

你可能感兴趣的:(leetcode,算法,数据结构)