【力扣】374.猜数字大小

简介: 【力扣】374.猜数字大小

374.猜数字大小

题目描述

猜数字游戏的规则如下:

  • 每轮游戏,我都会从 1n 随机选择一个数字。 请你猜选出的是哪个数字。
  • 如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了。

你可以通过调用一个预先定义好的接口 int guess(int num) 来获取猜测结果,返回值一共有 3 种可能的情况(-110):

  • -1:我选出的数字比你猜的数字小 pick < num
  • 1:我选出的数字比你猜的数字大 pick > num
  • 0:我选出的数字和你猜的数字一样。恭喜!你猜对了!pick == num

返回我选出的数字。

示例 1:

输入:n = 10, pick = 6

输出:6

示例 2:

输入:n = 1, pick = 1

输出:1

示例 3:

输入:n = 2, pick = 1

输出:1

示例 4:

输入:n = 2, pick = 2

输出:2

提示:

  • 1 <= n <= 231 - 1
  • 1 <= pick <= n

解题方案

  • C 二分法
/**
 * 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);
 */
int guessNumber(int n) {
    int left = 1, right = n; // 定义左值、右值
    int mid = 0;             // 定义中值

    while (left <= right) {
        mid = left + (right - left) / 2; // 计算中值
        int ret = guess(mid);            // 猜数
        if (ret == 0) {
            return mid;
        } else if (ret == 1) {
            left = mid + 1; // 增大左值
        } else {
            right = mid - 1; // 减小右值
        }
    }
    return 0;
}

复杂度分析

时间复杂度为 O(log⁡n),n 为区间初始长度。

空间复杂度为 O(1)。


相关文章
|
数据采集 存储 SQL
基于Apache doris的元数据管理系统
什么是元数据?元数据和数据的区别是什么?元数据有什么作用。
1926 0
基于Apache doris的元数据管理系统
|
5月前
|
存储 关系型数据库 调度
|
人工智能 监控 Java
基于 eBPF 技术打造的 LightAPM 应用监控,效果如何
本文介绍如何利用LightAPM解决“古早应用”(如银行老核心、证券交易系统)的监控难题。这些基于C/C++或老旧JDK的系统封闭且难以改造,传统字节码增强技术无法适用。通过部署集成eBPF技术的OneAgent,LightAPM实现无侵入、开箱即用的监控,自动绘制服务拓扑、发现服务并采集应用与基础设施指标,支持多JDK混合环境。结合因果AI,还可智能告警与根因定位,为遗留系统提供高效可观测性方案。
基于 eBPF 技术打造的 LightAPM 应用监控,效果如何
|
机器学习/深度学习 设计模式 API
Python 高级编程与实战:构建微服务架构
本文深入探讨了 Python 中的微服务架构,介绍了 Flask、FastAPI 和 Nameko 三个常用框架,并通过实战项目帮助读者掌握这些技术。每个框架都提供了构建微服务的示例代码,包括简单的 API 接口实现。通过学习本文,读者将能够使用 Python 构建高效、独立的微服务。
|
12月前
|
消息中间件 存储 中间件
分布式消息中间件基础
消息中间件是一种基于异步消息传递的分布式系统通信工具,核心功能包括消息传输、存储、路由与投递,能够实现系统解耦、异步处理和流量削峰。其主要组件包括生产者、消费者、Broker、主题/队列等,支持点对点和发布-订阅两种消息模型。主流中间件如Kafka(高吞吐)、RabbitMQ(灵活路由)、RocketMQ(事务支持)各有特色,适用于不同场景。此外,中间件还涉及多种协议(AMQP、MQTT等)、可靠性传输机制(持久化、确认机制)、顺序性与重复性问题解决以及事务支持(两阶段提交、本地消息表等)。选择中间件需根据业务需求权衡性能、功能和运维成本。
535 6
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的个人云盘管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的个人云盘管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
231 1
QT TextEdit控件 全面详解
本文详细的介绍了TextEdit控件的各种操作,例如:获取内容、输入控件字符、保持在最后一行添加(自动滚屏)、定时关闭、添加数据换行、向鼠标位置插入一行字符、设置字体颜色属性等操作。 本系列QT全面详解文章目前共有十五篇,本系列文章较为详细的讲述了QT控件的基础操作和使用,也谢谢大家的关注、点赞、收藏。
2250 2
QT TextEdit控件 全面详解
|
JSON 自然语言处理 前端开发
实操|基于抽象语法树(AST)的代码问题修复
文章介绍了如何通过抽象语法树(AST)技术自动化地解决前端代码治理中的具体问题,特别是针对大量存在的未使用变量或函数参数等问题。
|
存储 安全 数据安全/隐私保护
配置本地安全策略(一)
配置本地安全策略(一)
736 0
|
缓存 负载均衡 安全
如何应对DDoS攻击:技术策略与实践
【8月更文挑战第20天】DDoS攻击作为一种常见的网络威胁,对信息系统的安全稳定运行构成了严峻挑战。通过采用流量清洗、CDN、负载均衡、防火墙与IPS、协议与连接限制、强化网络基础设施、实时监测与响应以及专业DDoS防护服务等策略,企业可以构建更加健壮的防御体系,有效应对DDoS攻击。然而,防御DDoS攻击的最佳方法是预防,企业应定期进行风险评估和安全演练,及时更新和强化安全措施,以提高网络的抵御能力和应对能力。