首页 > 其他分享 >代码随想录Day1-二分查找法|快慢指针

代码随想录Day1-二分查找法|快慢指针

时间:2024-06-21 18:58:41浏览次数:13  
标签:二分 随想录 Day1 中间 查找 数组 指针

二分查找

题目链接
二分查找是一个较为基础的查找方式,对一个有序没有重复值的数组进行查找时,能够提供一个较好的时间复杂度\(O(log(n))\)

算法概要

对于有序并且没有重复值的数组来说,我们可以首先选定整个数组的中间下标,它的值则称为中间值,通过它把大数组分成两个小的数组,其中一个数组包含的全部是小于该中间值的元素(在此检查小数组),另一个数组内的值包含的全部是大于该中间值的元素(在此简称大数组)。因为该数组是有序的,我们可以根据目标值和选定的中间值进行比较大小来选择用哪个小数组进行下一次二分查找。如果中间值比目标值小,我们则选择大数组,如果中间值比目标值大,我们则选择小数组。重复此过程便能得到最后所需要查找的值的下标。

难点——边界问题

在此次做题中,我遇到的困难是边界问题,虽然知道具体的算法该怎么实现,但是在具体大小的比较下还是有点混乱,例如数组区间的左右两边是开口的还是闭合的,导致我一直陷入死循环。

代码随想录提供了一个较为清晰的思路,叫循环不变量法则。通俗的讲,当你的区间是左闭右闭,则之后的数组都需要保持这个状态。其他情况也是一样。

删除数组

题目链接

心得

这是一道相对简单的题目,我的第一思路是交换需要删除的数值和其他数值的位置得到最后的结果。在看了题解时候我发现不需要进行交换,直接把需要删除的值后面的所有数值往前挪一个位置即可。

在看了题解之后,原来还有快慢指针这个非常方便的方法能够解决这个题目。初始时,我们设置两个指针指向的下标是一致的,当遇到需要删除的值时,慢指针则会停下,让快指针指向后续的元素。之后将快指针指向下标的值不断赋值给慢指针指向的下标的值就结束这道题了。

耗时:3h(做题 + 博客)

标签:二分,随想录,Day1,中间,查找,数组,指针
From: https://www.cnblogs.com/TKK-YLF/p/18261199

相关文章

  • 代码随想录算法训练营第17天 | 二叉树04
    代码随想录算法训练营第17天找树左下角的值https://leetcode.cn/problems/find-bottom-left-tree-value/找树左下角的值代码随想录https://leetcode.cn/problems/find-bottom-left-tree-value/路径总和https://leetcode.cn/problems/path-sum/description/路径总和2https......
  • m2_day11 [IO流]
    课程内容:InputStreamReader和OutputStreamWriterIO流新特性InputStreamReader和OutputStreamWriter编码->编码方式->字符集ANSI(微软制定)=ASCII+GBK(本地编码,不同国家不同)​InputStreamReader和OutputStreamWriter是桥转换器,主要用于指定[字符编码]去读取或者写入数......
  • m2_day12 [URL + Socket]
    课程内容:URL和SocketServer端Client端URL和SocketURL=>统一资源定位符:网址URLurl=newURL("网址");URLConnectionuc=url.openConnection();InputStreamis=uc.getInputStream();....​uc.getContentLength();得到目标内容长......
  • m2_day13 [项目周]
    课程内容:GUI图形用户界面监听攻略GUIGUI=>G=图形U=用户I=接口​图形用户接口=用户图形界面...​java.awt.*; Button重量级组件javax.swing.*;JButton轻量级组件​常见的6个步骤:1.选择容器Container和组件Component......
  • m2_day14 [项目周]
    课程内容:分层思想的实现分层思想的实现连接后台的功能前台传给后台的数据后台返回什么1.注册用户名+密码操作是否成功2.登录用户名+密码操作是否成功3.点菜用户名+菜1+菜2...操作是否成功​​申请表Request:......
  • m2_day15 [数据库]
    Day01OracleSQL=StructuredQueryLanguage=结构化查询语言DDL=DataDifinitionLanguage=数据定义语言create创建alter修改drop删除truncate截断DML=DataManipulationLanguage=数据操纵语言insert新增delete删除update更新DQL=DataQueryLa......
  • m2_day10 [IO流]
    课程内容:Reader和WriterFileReader和FileWriterBufferedReader和BufferedWriterPrintStream和PrintWriterPrintWriter相较于BufferedWriter强大之处Reader和WriterReader所有字符输入流统一的父类抽象类intread()intread(char[]data)in......
  • 机器学习day1
    机器学习day11.环境准备#pythonPython是一种解释型、面向对象、动态数据类型的高级编程语言,适合于快速开发。。pycharmetBrains开发的PythonIDE,支持高效的代码编辑和项目管理。此外,该IDE提供了一些高级功能,以用于支持Django框架下的专业Web开发。anaconda就是可以便捷获......
  • 代码随想录刷题复习day01
    day01数组-二分查找classSolution{publicintsearch(int[]nums,inttarget){//左闭右闭intleft=0;intright=nums.length-1;intmid=0;while(right>=left){mid=left+(right-le......
  • 【题解】CF1949B | 二分答案 霍尔定理
    本题可以做到低于\(O(n^2)\)。最大化最小值,考虑二分答案\(v\)变为检查可行性:每个主菜匹配的开胃菜的两个值都要在\((-\infty,x-v],[x+v,+\infty]\)间选取,问是否存在主菜与开胃菜的完美匹配。对开胃菜排序,得到第\(i\)个主菜可以匹配到的开胃菜集合为一个后缀和一个前缀:\([......