LeetCode、374. 猜数字大小【简单,二分】

这篇具有很好参考价值的文章主要介绍了LeetCode、374. 猜数字大小【简单,二分】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

博主介绍:✌目前全网粉丝2W+,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。

涵盖技术内容:Java后端、算法、分布式微服务、中间件、前端、运维、ROS等。

博主所有博客文件目录索引:博客目录索引(持续更新)

视频平台:b站-Coder长路


LeetCode、374. 猜数字大小【简单,二分】

来源:LeetCode专题《LeetCode 75》

题目及类型

题目链接:LeetCode、374. 猜数字大小

类型:基础算法/二分


思路及代码实现

思路:

注意点:对于l + r可能会爆int,我们可以使用一个临时long存储,接着再转为int。

对于猜测的数若是<=目标值,那么区间范围为[l, mid],若是>目标值,区间值范围[mid + 1, r],在本题中由于一定能够命中某一个值,那么最终的结果就一定是l或者r。

代码:

复杂度分析:时间复杂度O(logn);空间复杂度O(1)

/** 
 * Forward declaration of guess API.
 * @param  num   your guess
 * @return 	     -1 if num is higher than the picked number
 *			      1 if num is lower than the picked number
 *               otherwise return 0
 * int guess(int num);
 */
public class Solution extends GuessGame {
    public int guessNumber(int n) {
        int l = 1, r = n;
        while (l < r) {
            //取到中间值   (long)l + r >> 1 会超时,会构成这样的效果(long)l + (r >> 1)
            //我们的目的应该是((long)l + r) >> 1
            long tmp = ((long)l + r) >> 1;//临时使用long存储
            int mid = (int)tmp;
            int pick = guess(mid);
            //若是<=,那么区间为[l, mid],若是> 则为[mid + 1, r]
            if (pick <= 0) {
                r = mid;
            }else {
                l = mid + 1;
            }
        }
        return l;
    }
}

LeetCode、374. 猜数字大小【简单,二分】,# LeetCode,算法刷题,leetcode,算法,职场和发展


资料获取

大家点赞、收藏、关注、评论啦~

精彩专栏推荐订阅:在下方专栏👇🏻

  • 长路-文章目录汇总(算法、后端Java、前端、运维技术导航):博主所有博客导航索引汇总
  • 开源项目Studio-Vue—校园工作室管理系统(含前后台,SpringBoot+Vue):博主个人独立项目,包含详细部署上线视频,已开源
  • 学习与生活-专栏:可以了解博主的学习历程
  • 算法专栏:算法收录

更多博客与资料可查看👇🏻获取联系方式👇🏻,🍅文末获取开发资源及更多资源博客获取🍅


整理者:长路 整理时间:2024.1.19文章来源地址https://www.toymoban.com/news/detail-807805.html

到了这里,关于LeetCode、374. 猜数字大小【简单,二分】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Leetcode刷题笔记——二分法

    二分法是搜索算法中极其典型的方法,其要求输入序列有序并可随机访问。算法思想为 输入:有序数组nums,目的数值target 要求输出:如果target存在在数组中,则输出其index,否则输出-1 将原数组通过[left,right]两个索引划分范围,初值left=0,right=数组的最后一个元素 当left = r

    2024年02月10日
    浏览(41)
  • leetcode分类刷题:二分查找(Binary Search)(四、基于值域的数组/矩阵类型)

    基于值域的二分法与基于定义域的题型不同,它的目标是从一“ 特殊排序序列 ”中确定“第k个元素值”,而不像基于定义域的题型是从排序序列中找小于等于特定target值的第一个索引;同时,针对“特殊排序序列”,往往需要 嵌套使用双指针 法进行操作,进一步增加了对

    2024年02月11日
    浏览(58)
  • leetcode刷题:消失的数字

    数组 nums 包含从 0 到 n 的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗? 注意: 本题相对书上原题稍作改动 示例 1: 示例 2: 针对于这道题,我们提供了三种解法: 首先使用快排对数组进行排序,使其变成有序数组,由题意得

    2024年01月24日
    浏览(36)
  • LeetCode刷题---简单组(六)

    官方作答,使用数学公式的转换进行求解 解法二使用的是二分法,本人属实没想到,常规来说,二分法用于查询,居然在这里可以用到,当然此题也是查询,还是自己笨~ 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以

    2024年02月06日
    浏览(31)
  • 看完这篇文章你就彻底懂啦{保姆级讲解}-----(LeetCode刷题704、35、34数组二分查找) 2023.4.17

    本文章一部分内容参考于《代码随想录》----如有侵权请联系作者删除即可,撰写本文章主要目的在于记录自己学习体会并分享给大家,全篇并不仅仅是复制粘贴,更多的是加入了自己的思考,希望读完此篇文章能真正帮助到您!!! 数组是由n(n=1)个 相同类型 的数据元素

    2024年02月05日
    浏览(47)
  • Java leetcode简单刷题记录1

    最大匹配字符串:https://leetcode.cn/problems/find-maximum-number-of-string-pairs/description/ 判断字符串数组中 字符串与某个字符串反转后是否一致; StringBuffer 或者 StringBuidler的 reverse方法 回文数: https://leetcode.cn/problems/palindrome-number/ StringBuffer 或者 StringBuidler的 reverse方法 罗马数字转整数

    2024年01月18日
    浏览(37)
  • leetcode算法刷题——链表

    题意:删除链表中等于给定值 val 的所有节点。 示例 1: 输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5] 示例 2: 输入:head = [], val = 1 输出:[] 示例 3: 输入:head = [7,7,7,7], val = 7 输出:[] 在链表类中实现这些功能: get(index):获取链表中第 index 个节点的值。如果索引无效,

    2024年02月21日
    浏览(45)
  • 【贪心算法】leetcode刷题

    贪心算法无固定套路。 核心思想:先找局部最优,再扩展到全局最优。 两种思路: 1、从大到小。局部最优就是大饼干喂给胃口大的,充分利用饼干尺寸喂饱一个,全局最优就是喂饱尽可能多的小孩。 先遍历的胃口,在遍历的饼干 2、从小到大。 小饼干先喂饱小胃口 。两个

    2024年02月14日
    浏览(47)
  • 【算法|二分查找No.4】leetcode 852. 山脉数组的峰顶索引

    个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助 🍓希望我们一起努力、成长,共同进步。

    2024年02月05日
    浏览(62)
  • 每天一道leetcode:剑指 Offer 53 - I. 在排序数组中查找数字 I(适合初学者&二分查找)

    统计一个数字在排序数组中出现的次数。 0 = nums.length = 10^5 -10^9 = nums[i] = 10^9 nums 是一个非递减数组 -10^9 = target = 10^9 使用两次二分查找找到target在数组中的左右边界,然后长度就是右边界减去左边界再加一,最后返回长度即可。   欢迎大家在评论区讨论,如有不懂的代码部分

    2024年02月14日
    浏览(53)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包