根据数字二进制下1的数目排序

2023-11-06

LeetCode

根据数字二进制下1的数目排序

给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序。

如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列。

请你返回排序后的数组。

示例 1:

输入:arr = [0,1,2,3,4,5,6,7,8]
输出:[0,1,2,4,8,3,5,6,7]
解释:[0] 是唯一一个有 0 个 1 的数。
[1,2,4,8] 都有 1 个 1 。
[3,5,6] 有 2 个 1 。
[7] 有 3 个 1 。
按照 1 的个数排序得到的结果数组为 [0,1,2,4,8,3,5,6,7]

示例 2:

输入:arr = [1024,512,256,128,64,32,16,8,4,2,1]
输出:[1,2,4,8,16,32,64,128,256,512,1024]
解释:数组中所有整数二进制下都只有 1 个 1 ,所以你需要按照数值大小将它们排序。

示例 3:

输入:arr = [10000,10000]
输出:[10000,10000]

示例 4:

输入:arr = [2,3,5,7,11,13,17,19]
输出:[2,3,5,17,7,11,13,19]

示例 5:

输入:arr = [10,100,1000,10000]
输出:[10,100,10000,1000]

解法1:冒泡排序

解题思路:

按照冒泡排序的思想,只要把arr[j]>arr[j+1]条件改成countBits(arr[j])>countBits(arr[j+1)就可以了

代码如下:

class Solution {
    public int[] sortByBits(int[] arr) {
        Arrays.sort(arr);
        for(int i=0; i<arr.length; i++)
            for(int j=0; j<arr.length-i-1; j++)
            {
                if(Integer.bitCount(arr[j])>Integer.bitCount(arr[j+1]))
                {
                    swap(arr,j,j+1);
                }
            }
        return arr;
    }
    public void swap(int[] arr, int i, int j)
    {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

虽然冒泡排序可以解决,但是效率不高,所以我们需要其他更好的解法

解法2:数组重赋值

解题思路:

我们可以将原来数组的值变成它二进制下1的数量num和它原来的值的一个重新赋值

arr[i] = Integer.bitCount(arr[i])*10001 + arr[i]

*10001是一个加权的过程,我们要让bit的数量起更大的决定作用

完整代码:

class Solution {
    public int[] sortByBits(int[] arr) {
        int[] map = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            map[i] = Integer.bitCount(arr[i]) * 10001 + arr[i];
        }
        Arrays.sort(map);
        for (int i = 0; i < map.length; i++) {
            map[i] = map[i] % 10001;
        }
        return map;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据数字二进制下1的数目排序 的相关文章

  • CompletableFuture:whenCompleteAsync() 不允许我重新抛出异常

    我是 CompletableFuture 世界的新手 我正在尝试做一些负面测试 以允许我故意抛出异常的方式 该异常将决定通过 失败 这是代码片段 protected CompletableFuture
  • JAVA_HOME环境变量和Java JDK趣事

    我想让 Java 在 1 6xxx 上运行 我更改了 JAVA HOME 变量并将其指向目录 C Program Files Java jdk1 6 0 16 我重新启动 PC 我想我可以检查我的机器指向哪个版本的 Java 但它仍然指向旧
  • 方法重载。你能过度使用它吗?

    当定义多个使用不同过滤器返回相同形状的数据的方法时 什么是更好的做法 显式方法名称或重载方法 例如 如果我有一些产品并且我正在从数据库中提取 显式方式 public List
  • cygwin有java sdk吗?

    cygwin有java sdk吗 如果有一个使用 cygwin 文件系统和 X windows 进行显示的本机 cygwin 实现 那就太好了 不幸的是我不知道这样的版本 我认为移植 OpenJDK 也需要付出很大的努力 但我还没有尝试过
  • Java 8 中异常类型推断的一个独特功能

    在为该网站上的另一个答案编写代码时 我遇到了这个特性 static void testSneaky final Exception e new Exception sneakyThrow e no problems here nonSnea
  • JTree 避免重新加载后崩溃

    我正在尝试找到解决崩溃问题的方法JTree重新加载后 情况 JTree Office A Office A 1 Office A 1 1 Office A 1 2 Office B Office B 1 Office B 1 1 Offic
  • 视频文件转换/转码 Google App Engine

    我想启动一个云计算项目 其简单任务是 接收上传的视频文件 对它们进行一些转码 转换 允许用户下载 流式传输生成的文件 我刚在想ffmpeg作为集成在的外部命令行工具Java Google App engine Application 由于很
  • [TYPE] 类型的 Bean 'x' 不符合所有 BeanPostProcessors 的处理条件

    我有一个ResourceAspect class Component Aspect public class ResourceAspect Before execution public public void resourceAccess
  • Poi:从 xlsm 打开 Excel 文件后将其保存为 xlsx

    我正在编写一个java程序 它打开一个用户定义的excel文件 用数据填充它 然后将其保存在用户指定的路径 文件名和扩展名下 即使输入文件是 xlsm 也应该可以声明输出保存为 xlsx 但实际上是不可能的 如果我尝试使用下面的代码 打开文
  • 最终类中的静态函数是否隐式最终?

    我的问题基本上与this https stackoverflow com q 8766476 3882565一 但这是否也适用于static功能 我想了解 编译器是否处理所有static函数在一个final类为final 是否添加final
  • Java 7 中新的 JNLP 缺少项目警告是怎么回事?

    从 Java 6 切换到 Java 7 后 我的 JNLP 仍然工作正常 但它现在抛出一系列如下错误 Missing Application Name manifest attribute for http blah com app jar
  • MongoDb Spring 在嵌套对象中查找

    我正在使用 Spring Data Mongodb 和这样的文档 id ObjectId 565c5ed433a140520cdedd7f attributes 565c5ed433a140520cdedd73 333563851 list
  • 检查对象是否为空

    我有一个链表 其中第一个节点包含空对象 表示firstNode data等于null firstNode nextPointer null firstNode previousPointer null 我想检查firstNode 是否为空
  • 使用 Jboss7 加载资源返回 null

    如何使用Jboss7 1从java代码中加载图像等资源 这曾经与 Jboss4 一起使用 this getClass getClassLoader getResourceAsStream myapp includes images imag
  • 如何保存/加载 BigInteger 数组

    我想保存 加载BigInteger数组传入 传出 SharedPreferences 如何做呢 例如对于以下数组 private BigInteger dataCreatedTimes new BigInteger 20 Using Gso
  • 使用mapstruct映射不同类型列表的元素

    我们正在映射一个对象 该对象具有一个对象列表 这些对象都实现了父接口 但可能具有不同的实现 但当我们映射列表时 似乎只有来自 ParentClass 的值被映射 而不是来自子类的值 但直接映射子进程就可以了 public class Par
  • 当 javadoc 未附加到依赖项时,如何将 javadoc 引用到 Maven 的 eclipse 插件中的依赖项

    我在开发中使用 Eclipse Maven 和 Java 我使用 Maven 下载依赖项 jar 文件和 javadoc 如果可用 并使用 Maven 的 eclipse 插件为 Eclipse 生成 project 和 classpath
  • 如何强制 Spark 执行代码?

    我如何强制 Spark 执行对 map 的调用 即使它认为由于其惰性求值而不需要执行它 我试过把cache 与地图调用 但这仍然没有解决问题 我的地图方法实际上将结果上传到 HDFS 所以 它并非无用 但 Spark 认为它是无用的 简短回
  • 使用 System.out.println 显示特殊字符

    我在将带有特殊字符的文本从网络服务发送或显示到数据库时遇到问题 在我的 Eclipse 上 我已将字符编码设置为 UTF 8 但它仍然不允许我显示字符 例如 像下面的代码一样简单的打印 String test System out prin
  • 仅当用户开始输入时清除 JavaFX TextField 中的提示文本

    默认行为是当字段获得焦点时 字段中的提示文本将被删除 那是标记在场上的时候 是否可以配置文本字段 以便仅在用户开始输入时删除提示文本 否则 我需要在每个文本字段旁边 上方添加一个标签 以描述其中的值 我知道它有点旧 但我自己也需要它 这仍然

随机推荐

  • 超详细 Windows 安装 PyTorch 步骤+ conda 常用命令

    目录 配置 PyTorch 安装环境 下载安装 Ananconda 创建 PyTorch 安装环境 conda 常用命令 安装 PyTorch 说在前面 安装非 GPU 版本的 PyTorch 安装 GPU 版本 PyTorch 检查 CU
  • [管理与领导-61]:IT基层管理者 - 潜技能 - 1 - 职场中的陷阱- 职场中常见的陷阱与应对措施

    目录 一 常见陷阱 二 应对措施 一 常见陷阱 在职场中 有许多常见的陷阱 下面是一些例子 过度承诺和无法有效管理时间 在职场中 很容易迫于压力而承诺过多的事情 导致时间管理困难和任务完成的延误 这可能导致质量下降 工作生活平衡失衡 甚至疲
  • spring cache设置指定Key过期时间

    今天是2019年最后一天 回想年初立下的小目标 貌似都完成的不理想 还得继续努力啊 生活还在继续 加油 最近刚好在使用spring cache做缓存的时候 有需要针对不同的key设置过期时间的场景 找了下资料 实现这个功能 做个总结 spr
  • Ubuntu中报错:failed to create hard link

    1 完整报错打印 上面是我在编译jpg图片的解码库时遇到的报错 报错原因显示创建硬链接失败 不允许创建硬链接 2 报错原因分析 1 我是在Ubuntu和Windows的共享文件夹目录中编译程序 共享目录是Ubuntu和Windows共享的
  • 使用gpg密钥验证github提交

    git是现在最流行的版本控制工具 而且它确实功能很强大 在使用git之前 首先要设置用户名和电子邮箱两个参数 可能有人会有疑问 假如两个不同的人使用相同的用户名和电子邮箱进行提交 会怎么样呢 答案是可以的 git本身无法判断 所以会把这两个
  • C++ 单元测试与代码覆盖率测试方法

    前言 测试是软件开发过程中一个必须的环节 测试确保软件的质量符合预期 对于工程师自己来说 单元测试也是提升自信心的一种方式 直接交付没有经过测试的代码是不太好的 因为这很可能会浪费整个团队的时间 在一些原本早期就可以发现的问题上 而单元测试
  • Shell脚本攻略:文本三剑客之awk

    目录 一 理论 1 awk原理 2 awk打印 3 awk条件判断 4 awk数组与循环 5 awk函数 6 常用命令 二 实验 1 统计磁盘可用容量 2 统计 etc下文件总大小 3 CPU使用率 4 统计内存 5 监控硬盘 一 理论 1
  • 异步赠书:AI专栏(AI圣经!《深度学习》中文版)

    最新活动 邀请10名好友关注微信公众号 异步图书 10天 即可获得异步图书一本 点击立即参与活动 今天小编开启了大咖重磅新书赠送活动 如果你热爱读书 热爱技术 参与到异步赠书活动中来 都有机会得到新书中的一本哦 本次活动已结束 没有抢到 深
  • poj 1852 Ants

    题意 在一个管子里面有一些蚂蚁 他们按照初始的方向走 遇到蚂蚁后就掉头 问最少经过多长的时间 他们都已经走出了管子 这道题目想到了会很简单没想到会很纠结 提示 他们相遇的时候假设他们穿过了对方的身体 代码 include
  • AD利用嘉立创的封装

    1 首先 打开元件库 搜索元器件 2 点开它的封装 符号 3 文件 gt 导出 gt Altium Designer 4 然后在AD上面打开这个文件 5 将其复制 粘贴放到PCB库中 6 然后在原理图中的封装管理器中 添加封装 管脚映射修改
  • BAT紧盯,汽车后市场的优质资产还有谁?

    巨头的一举一动 都是各方焦点 最近阿里与汽车超人 康众汽配的联手 一方面说明汽车后市场这块肥肉巨头紧盯 潜力仍待挖掘 另一方面也说明 仅拥有资本 用户 供应链在这个行业并不一定能走下去 加码行业垂直资源 合纵连横 资源互补或许才是出路 01
  • React多页面应用5(webpack4 多页面自动化生成多入口文件)

    本教程总共9篇 每日更新一篇 请关注我们 你可以进入历史消息查看以往文章 也敬请期待我们的新文章 1 React多页面应用1 webpack4 开发环境搭建 包括热更新 api转发等 2018 04 04 2 React多页面应用2 web
  • 基于Springboot+SpringCloud 的微服务架构脚手架,接私活很丝滑(附源码)

    点击关注 武哥聊编程 2022 02 24 08 50 收录于话题 项目开发26个 大家好 我是武哥 今天给大家推荐一个牛逼的接私活项目 SpringCloud微服务架构项目 一个由商业级项目升级优化而来的微服务架构 采用SpringBoo
  • ctfshow web4

    本次解法使用工具 burpsuite和中国蚁剑 这是web3的进化版 老的方法已经行不通 了 只能通过日志注入得到shell 这里我们输入默认目录获取日志 url var log nginx access log 之后就得到了日志文件 接下
  • 【Python 3.7】将点数相乘:同时掷两个骰子时,通常将它们的点数相加。请通过可视化展 示将两个骰子的点数相乘的结果。

    Python 3 7 将点数相乘 同时掷两个骰子时 通常将它们的点数相加 请通过可视化展 示将两个骰子的点数相乘的结果 其中die py文件中的程序为 from random import randint class Die 表示一个骰子的
  • 在unicode环境下将CString类型转换成char

    原帖地址 http hi baidu com sqhily2008 blog item e38834fcaf105d0d09244d83 html 在Visual C NET2005中 默认的字符集形式是Unicode 但在VC6 0等工程
  • 自己动手绕线圈电感详细计算公式

    加载其电感量按下式计算 线圈公式 阻抗 ohm 23 14159F 工作频率 电感量 mH 设定需用360ohm阻抗 因此 电感量 mH 阻抗 ohm 23 14159 F 工作频率 360 23 14159 7 06 8 116mH 据此
  • element-table中当点击row的时候背景色发生

    效果图 当点击行的时候 则背景添加颜色 再次点击则颜色去掉 1 在el table标签中添加 row click和row style事件 row click tableClick row style isActive tableClick
  • Pyinstaller PyQt5 QFontDatabase: Cannot find font directory

    在解决了上一篇的 no module named pyqt5 sip问题以后 这是打包以后的第二个问题 在ubuntu 执行源码的时候字体可以正常显示 python3 main py 但是通过pyinstaller打包以后就找不到字体了 大
  • 根据数字二进制下1的数目排序

    LeetCode 根据数字二进制下1的数目排序 给你一个整数数组 arr 请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序 如果存在多个数字二进制中 1 的数目相同 则必须将它们按照数值大小升序排列 请你返回排序后的数组 示例