当前位置: 首页 > news >正文

LeetCode 面试题 05.04. 下一个数

文章目录

  • 一、题目
  • 二、Java 题解
    • 2.1 求大数:
    • 2.2 求小数:

一、题目

  下一个数。给定一个正整数,找出与其二进制表达式中1的个数相同且大小最接近的那两个数(一个略大,一个略小)。

示例1:

输入: num = 2(或者0b10)
输出: [4, 1] 或者([0b100, 0b1])

示例2:

输入: num = 1
输出: [2, -1]

提示:

  • num 的范围在 [1, 2147483647] 之间;
  • 如果找不到前一个或者后一个满足条件的正数,那么输出 -1。

  点击此处跳转题目。

二、Java 题解

  看了一些题解后,分享一下我个人认为自己的较为简单易懂的代码。

  求大数和小数可以看做是进/退位运算,因此从右向左对二进制进行遍历,使用 ones 记录出现过 1 的次数。

2.1 求大数:

  求大数即进位,从左向右用指针 i(从 0 开始计数)对 num 进行判断,遇到 1 后第一次遇到 0 即停止。此时 i 指向 0,右方是连续的 1 串。将右方的连续 1 串进位(即 i 指向的 0 变为 1),之后重组剩余的 ones - 1 个 1(向右靠拢),得到最小的大数:

⟵ i 0 1 0 ⏞ i = 5 1 1 1 ⏞ o n e s = 3 0 0 ⇓ + 1 0 0 ⏞ i − o n e s 个 0 1 1 ‾ 0 0 0 0 0 ⇓ + 1 1 ⏞ o n e s − 1 个 0 1 1 0 0 0 1 ‾ 1 ‾ \begin{array}{l} \hspace{10em} \longleftarrow^{\normalsize{i}}\\ 0 \hspace{1em} 1 \hspace{0.5em} \overbrace{0}^{i=5} \hspace{0.5em} \overbrace{1 \hspace{1em} 1 \hspace{1em} 1 }^{ones=3} \hspace{1em} 0 \hspace{1em} 0 \\\\ \hspace{1em}\hspace{1em}\hspace{1em}\hspace{1em}\hspace{1em}\Downarrow \scriptsize {\hspace{1em}+\hspace{1em}1\overbrace{0\hspace{1em}0}^{i-ones个}} \\\\ 0 \hspace{1em} 1 \hspace{1em} \underline{\bold{1}} \hspace{0.9em} 0 \hspace{1em} 0 \hspace{1em} 0 \hspace{1em} 0 \hspace{1em} 0 \\\\ \hspace{1em}\hspace{1em}\hspace{1em}\hspace{1em}\hspace{1em}\Downarrow \scriptsize {\hspace{1em}+\overbrace{1\hspace{1em}1}^{ones-1个}}\\\\ 0 \hspace{1em} 1 \hspace{1em} 1 \hspace{1em} 0 \hspace{1em} 0 \hspace{1em} 0 \hspace{1em} \underline{\bold{1}} \hspace{0.9em} \underline{\bold{1}} \end{array} i010 i=5111 ones=300+100 iones01100000+11 ones101100011

2.2 求小数:

  求小数即退位,从左向右用指针 i 对 num 进行判断,遇到 0 后第一次遇到 1 即停止。此时 i 指向 1,右方是连续的 0 串。i 位退位(即 i 指向的 1 变为 0),之后重组剩余的 ones - 1 个 1(向左靠拢),得到最大的小数:

⟵ i 1 1 ⏞ i = 6 0 0 1 1 1 1 ⏞ o n e s = 4 ⇓ + 1 1 1 0 1 ‾ 0 0 0 0 ⇓ − 1 0 0 0 0 ⏞ o n e s 个 1 1 0 0 ‾ 0 0 0 0 ⇓ − 1 0 ⏞ i − o n e s − 1 个 1 0 ‾ 1 ‾ 1 ‾ 1 ‾ 1 ‾ 1 ‾ ⏞ o n e s + 1 个 0 ⏟ i 个 \begin{array}{l} \hspace{10em} \longleftarrow^{\normalsize{i}}\\ 1 \hspace{0.5em} \overbrace{1}^{i=6} \hspace{0.5em} 0 \hspace{1em} 0 \hspace{1em} \overbrace{1 \hspace{1em} 1 \hspace{1em} 1 \hspace{1em} 1}^{ones=4} \\\\ \hspace{1em}\hspace{1em}\hspace{1em}\hspace{1em}\hspace{1em}\Downarrow \scriptsize {\hspace{1em}+\hspace{1em}1} \\\\ 1 \hspace{1em} 1 \hspace{1em} 0 \hspace{1em} \underline{\bold{1}} \hspace{0.9em} 0 \hspace{1em} 0 \hspace{1em} 0 \hspace{1em} 0 \\\\ \hspace{1em}\hspace{1em}\hspace{1em}\hspace{1em}\hspace{1em}\Downarrow \scriptsize {\hspace{1em}-1\hspace{1em}\overbrace{0\hspace{1em}0\hspace{1em}0\hspace{1em}0}^{ones个}}\\\\ 1 \hspace{1em} 1 \hspace{1em} 0 \hspace{1em} \underline{\bold{0}} \hspace{0.9em} 0 \hspace{1em} 0 \hspace{1em} 0 \hspace{1em} 0 \\\\ \hspace{1em}\hspace{1em}\hspace{1em}\hspace{1em}\hspace{1em}\Downarrow \scriptsize {\hspace{1em}-1\hspace{0.4em}\overbrace{0}^{i-ones-1个}}\\\\ 1 \hspace{1em} \underline{\bold{0}} \hspace{0.8em} \underbrace{\overbrace{\underline{\bold{1}} \hspace{0.8em} \underline{\bold{1}} \hspace{0.85em} \underline{\bold{1}} \hspace{0.8em} \underline{\bold{1}} \hspace{0.85em} \underline{\bold{1}}}^{ones+1个} \hspace{0.85em} 0}_{i个} \\\\ \end{array} i11 i=6001111 ones=4+11101000010000 ones1100000010 iones110i 11111 ones+10

class Solution {public int[] findClosedNumbers(int num) {int[] ans = new int[] { -1, -1 };// 求大数int ones = 0;for (int i = 0; i < 31; i++) {               // i < 31 表示不考虑符号位if ((num & (1 << i)) != 0) ones++;       // 遇到 1 更新 onesif ((num & (1 << i)) == 0 && ones > 0) { // 遇到 1 后的第一个 0ans[0] = num + (1 << (i - ones)) + (1 << (ones - 1)) - 1;break;}}// 求小数ones = 0;for (int i = 0; i < 31; i++) {if ((num & (1 << i)) == 0) continue; // 忽略 0// 以下为遇到 1 的情况if (i > ones) {                      // i 比 ones 大,表示前面遇到了 0ans[1] = num - (1 << ones) - (1 << (i - ones - 1)) + 1;break;}ones++;                              // 更新 ones}return ans;}
}
  • 时间:0 ms,击败 100.00% 使用 Java 的用户
  • 内存:37.83 MB,击败 91.57% 使用 Java 的用户

相关文章:

LeetCode 面试题 05.04. 下一个数

文章目录 一、题目二、Java 题解2.1 求大数&#xff1a;2.2 求小数&#xff1a; 一、题目 下一个数。给定一个正整数&#xff0c;找出与其二进制表达式中1的个数相同且大小最接近的那两个数&#xff08;一个略大&#xff0c;一个略小&#xff09;。 示例1: 输入&#xff1a; n…...

SDXL prompt 笔记

模型 模型有两个&#xff0c;分别是 stable-diffusion-xl-base-1.0、stable-diffusion-xl-refiner-1.0。 base 模型是用来做文生图&#xff0c;refiner 模型是用来做图生图的。 SDXL 模型之 base、refiner 和 VAE_云水木石的博客-CSDN博客 分辨率 默认是1024*1024&#xf…...

使用Redis管道进行查询接口性能优化

一、引入 在我们的正常项目开发过程中&#xff0c;我们会通过Redis缓存数据&#xff0c;来帮我们进行异步任务&#xff0c;分担外部的请求压力 但是Redis缓存也有一定的限制&#xff0c;因为我们在向请求过来时&#xff0c;Redis客户端都要向服务端发送一次请求&#xff0c;相应…...

初学vue.js

准备Vue.js环境 ① 下载环境&#xff1a; javaScript语言的程序包&#xff1a;外部js文件 对于Vue来说&#xff0c;导入Vue的外部js文件就能够使用Vue框架了。 Vue框架的js文件获取: 官网提供的下载地址&#xff1a;https://cdn.jsdelivr.net/npm/vue/dist/vue.js ②导入环境…...

React的thunk中间件

Thunk 是一种中间件&#xff0c;它可以在 Redux 中处理异步操作。Thunk 中间件允许你在 action 中返回一个函数&#xff0c;而不仅仅是一个普通的 action 对象。这个返回的函数可以接收 dispatch 和 getState 作为参数&#xff0c;并且可以在函数内部进行异步操作。当使用 Thun…...

数组初学者向导:使用Python从零开始制作经典战舰游戏

引言 战舰游戏&#xff0c;一个广受欢迎的经典游戏&#xff0c;为玩家提供了策略与猜测的完美结合。这个游戏的核心思想是通过猜测敌方船只的位置并尝试击沉它们来赢得比赛。在这篇文章中&#xff0c;我们将使用Python语言和数组来构建这款游戏&#xff0c;让你更加了解数组的…...

【STM32】IAP升级 预备知识

IAP&#xff08;In Application Programming&#xff09;简介 Flash够大的情况下&#xff0c;上电后的程序通过修改 MSP 的方式&#xff0c;可以在一块Flash上存在多个功能差异的程序。 IAP是为了在执行正常功能前&#xff0c;为了升级功能&#xff0c;提前运行的一段程序。这…...

asp.net网站的建立及运行

点击创建新项目 在输入框中输入asp.net&#xff0c;并选择图中的 点击下一步 点击创建 然后&#xff0c;右键&#xff0c;添加&#xff0c;新建项 选择web窗体 点击添加 点击视图&#xff0c;工具箱 选择一个label&#xff0c;记住这个id 空白处右键&#xff0c;查看代码 添…...

怎么把webm转换成mp4?

怎么把webm转换成mp4&#xff1f;与MP4这位视频格式大哥相比&#xff0c;Webm这种视频格式还有很多小伙伴对它不太熟悉&#xff0c;因为大家平时也是偶尔才能接触到&#xff0c;属于不常用的视频格式。Webm是一种开放、免费的媒体文件格式&#xff0c;尽管如今它的应用范围比以…...

RabbitMQ 消息应答

每日一句 物是人非事事休,欲语泪先流。 概述 为了保证消息在发送过程中不丢失,RabbitMQ引入了消息应答机制, 消费者在接收到消息并且处理该消息后,告诉RabbitMQ它已经处理了,RabbitMQ可以把消息删除了。 自动应答 消息发送后立即被认为已经传送成功,这种模式需要在…...

【C++】C++ 类中的 this 指针用法 ③ ( 全局函数 与 成员函数 相互转化 | 有参构造函数设置默认参数值 | 返回匿名对象与返回引用 )

文章目录 一、全局函数 与 成员函数 相互转化1、成员函数转为全局函数 - 多了一个参数2、全局函数转为成员函数 - 通过 this 指针隐藏操作数 二、有参构造函数设置默认参数值三、返回匿名对象与返回引用四、完整代码示例 一、全局函数 与 成员函数 相互转化 1、成员函数转为全局…...

游戏遇到的问题

天涯明月刀 就是天刀的假全屏&#xff0c;很多天刀玩家可能玩其他游戏比较少或者对电脑了解不多&#xff0c;不在意帧数&#xff0c;但是肯定还是有一部分玩家发现了这个问题&#xff0c;就是“我使命召唤12都能跑到60帧的机器跑个破天刀40帧甚至30帧?”问题何在呢&#xff1…...

高性能系统的性能优化技巧:从专家的经验中学习 | 开源日报 No.40

binhnguyennus/awesome-scalability Stars: 48.3k License: MIT 这个项目是一个阅读列表&#xff0c;用于说明可扩展、可靠和高性能大规模系统的模式。该项目通过知名工程师的文章和可信参考资料来解释概念&#xff0c;并从为数以百万计甚至十亿用户提供服务的经过实战验证的系…...

Linux系统编程——进程间通信的学习

学习参考博文&#xff1a; 进程间的五种通信方式介绍Linux 信号介绍 Linux系统编程学习相关博文 Linux系统编程——文件编程的学习Linux系统编程——进程的学习Linux系统编程——线程的学习Linux系统编程——网络编程的学习 Linux系统编程——进程间通信的学习 一、概述1. 无…...

人工智能AI 全栈体系(六)

第一章 神经网络是如何实现的 这些年神经网络的发展越来越复杂&#xff0c;应用领域越来越广&#xff0c;性能也越来越好&#xff0c;但是训练方法还是依靠 BP 算法。也有一些对 BP 算法的改进算法&#xff0c;但是大体思路基本是一样的&#xff0c;只是对 BP 算法个别地方的一…...

NPDP是什么?考了有用吗?

1&#xff09;NPDP是什么&#xff1f; NPDP&#xff0c;全称为New Product Development Professional&#xff0c;即新产品开发专业人员。NPDP认证是由世界产品开发协会&#xff08;PDMA&#xff09;推出的一项专业认证。它旨在评估和认可个人在新产品开发领域的专业知识和技能…...

关于安卓SVGA浅尝(二)加载数据

关于安卓SVGA浅尝&#xff08;二&#xff09;加载数据 相关链接 SVGA官网 SVGA-github说明文档 背景 项目开发&#xff0c;都会和动画打交道&#xff0c;动画的方案选取&#xff0c;就有很多选择。如Json动画&#xff0c;svga动画&#xff0c;gif等等。各有各的优势。目前项…...

使用matlab产生二维动态曲线视频文件具体举例

使用matlab产生二维动态曲线视频文件举例 在进行有些函数变化过程时候&#xff0c;需要用到直观的动态显示&#xff0c;本博文将举例说明利用Matlab编程进行二维动态曲线的生成视频文件。 一、问题描述 利用matlab编程实现 y 1 s i n ( t ) , y 2 c o s ( t ) , y 3 s i …...

Selenium自动化测试框架常见异常分析及解决方法

01 pycharm中导入selenium报错 现象: pycharm中输入from selenium import webdriver, selenium标红 原因1: pycharm使用的虚拟环境中没有安装selenium, 解决方法: 在pycharm中通过设置或terminal面板重新安装selenium 原因2: 当前项目下有selenium.py,和系统包名冲突导致, …...

[TI] [Textual Inversion] An image is worth an word

自己的理解&#xff1a; 根据几个图像&#xff0c;找出来一个关键字可以代表它们&#xff0c;然后我们可以再用这个关键字去生成新的东西。 提出关键字 1 Introduction word->token->embedding Textual Inversion过程 需要&#xff1a; ① a fixed, pre-trained text…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...