当前位置: 首页 > 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…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...