代码随想录算法练习Day1:二分查找

这篇具有很好参考价值的文章主要介绍了代码随想录算法练习Day1:二分查找。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目链接:704. 二分查找

卡哥视频讲解:手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找

二分法概述:

二分法(Binary Search)是一种在有序数组或列表中查找目标元素的算法。

二分法使用前提

  1. 有序数组或列表:二分法要求在查找的数据结构中元素按照某种顺序有序排列,通常是升序排列。如果数组或列表没有排序,需要先对其进行排序,否则无法使用二分法进行查找。

  2. 目标元素存在:二分法适用于在有序数组或列表中查找目标元素是否存在,或者查找目标元素的位置。如果目标元素不在数组或列表中,二分法无法成功找到目标元素。

  3. 随机访问:二分法要求能够通过索引或指针以O(1)的时间复杂度访问数组或列表的任意位置。这通常意味着数据结构需要支持随机访问,比如数组。

代码示例:

示例1(左闭右闭写法):​​​​​​​代码随想录算法练习Day1:二分查找,算法,java

示例2(左闭右开写法):代码随想录算法练习Day1:二分查找,算法,java

总结:

1.>> 是右移位操作符,它将左操作数向右移动指定的位数。在这里,right - left 表示当前搜索范围的长度,right - left >> 1 将长度右移一位,相当于将长度除以2,得到搜索范围的一半。然后再加上 left,得到中间位置 mid

这种写法与普通的 (left + right) / 2 求中间位置的写法相比,可以避免在大数相加时可能导致的溢出问题,同时也更为高效。因为右移位操作符的性能比除法运算更高,尤其在一些硬件上会被优化为位运算。

2.在写范围的时候,是根据是否包含数组的边界元素来确定的。文章来源地址https://www.toymoban.com/news/detail-855922.html

到了这里,关于代码随想录算法练习Day1:二分查找的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 代码随想录day31 贪心算法初探

            就像卡哥视频里说的一样,感觉贪心算法确实没什么固定的套路,唯一的思路就是求局部最优解然后推广到全局最优解,但是什么是局部最优解,这个需要慢慢做题来摸索总结,有点像调参,蛮玄学的,纯考脑子 假设你是一位很棒的家长,想要给你的孩子们一些

    2024年01月18日
    浏览(150)
  • 代码随想录算法训练DAY25|回溯2

    力扣题目链接 找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。 说明: 所有数字都是正整数。 解集不能包含重复的组合。 示例 1: 输入: k = 3, n = 7 输出: [[1,2,4]] 示例 2: 输入: k = 3, n = 9 输出: [[1,2,6], [1,3,5], [2,3,4]

    2024年01月22日
    浏览(59)
  • 代码随想录算法训练DAY27|回溯3

    力扣题目链接 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明: 所有数字(包括 target)都是正整数。 解集不能包含重复的组合。 示例 1: 输入:candidates = [2,3,6,

    2024年01月23日
    浏览(54)
  • 代码随想录算法训练day4 | 链表

    目录 24. 两两交换链表节点 19. 删除链表倒数第n个节点 方法一:普通写法 方法二:双指针法 面试题:找链表相交节点 142. 判断环形链表 虚拟头节点的本质意义在于减少了特殊情况的处理。不用判断该节点是否在链表的第一位。 定义快慢两个指针。 fast先走n步,再让fast和s

    2024年02月04日
    浏览(60)
  • 代码随想录Day20 回溯算法 LeetCode77 组合问题

    以下内容更详细解释来自于:代码随想录 (programmercarl.com) 回溯法也叫回溯搜索法,是搜索法的一种,我们之前在二叉树中也经常使用到回溯来解决问题,其实 有递归就有回溯 ,有的时候回溯隐藏在递归之下,我们不容易发觉,今天我们来详细介绍一下什么是回溯,它能解决哪些问题.

    2024年02月08日
    浏览(50)
  • 【一天三道算法题】代码随想录——Day15(困难题只有一道)

    一. 滑动窗口最大值 题目链接:力扣 思路:         这道题我认为最难的是编程语言本身并没有一个可以让你完全直接开始使用的一个数据结构,也就是说要自己造轮子。并且为了尽可能的减少维护元素的个数我们要学会去在能实现功能的前提下,维护尽可能少的数组元

    2024年02月15日
    浏览(43)
  • 代码随想录 LeetCode数组篇 二分查找

    # (简单)704. 二分查找 题目链接 代码随想录 - 二分查找思路 二分查找,思路很简单,但是在while循环left和right的比较是写=还是,还有right=mid还是right=mid-1容易混淆 需要想清楚对区间的定义,是[left,right],还是[left,right) (版本一,左闭右闭版本) (版本二,左闭右开) 题目

    2024年02月02日
    浏览(50)
  • 代码随想录Python:704. 二分查找,27. 移除元素

    数组是非常基础的数据结构。 数组是存放在连续内存空间上的相同类型数据的集合。 题目: 给定一个  n  个元素有序的(升序)整型数组  nums  和一个目标值  target   ,写一个函数搜索  nums  中的  target ,如果目标值存在返回下标,否则返回  -1 。 题目链接:. - 力扣

    2024年02月13日
    浏览(51)
  • 代码随想录Day58

    昨天因为志愿活动和笔试耽误了一整天,今天继续学习动规解决子序列问题。 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,\\\"ace\\\"是\\\"abcde\\\"的一个子序列,

    2023年04月27日
    浏览(50)
  • 代码随想录day59

    647. 回文子串 给你一个字符串  s  ,请你统计并返回这个字符串中  回文子串  的数目。 回文字符串  是正着读和倒过来读一样的字符串。 子字符串  是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不

    2024年02月07日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包