根据数字二进制下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的数目排序 的相关文章

  • Java中字符串中特殊字符的替换

    Java中如何替换字符串 E g String a adf sdf 如何替换和避免特殊字符 您可以删除除此之外的所有字符可打印的 ASCII 范围 http en wikipedia org wiki ASCII ASCII printab
  • 插入最大日期(独立于数据库)

    在我的本地设置中 我使用一个简单的 H2 数据库 托管 解决方案将有另一个 类似但不相同 数据库 我需要将最大可能日期插入到日期时间列中 我尝试使用 Instant MAX 但是 这会导致列中出现 169104626 12 11 20 08
  • 如何创建一个显示 Spinners 的 x 和 y 值的表格?

    我想创建一个位于图表右侧的表格 其中显示 2 列 x 和 y 值已输入到xSpin and ySpin旋转器 我已经画了一张我想要桌子放置的位置的图 我尝试过在网格窗格布局中使用文本框来创建表格并将值直接输入到文本框网格中 但是我无法将它们
  • Java:如何从转义的 URL 获取文件?

    我收到了一个定位本地文件的 URL 事实上我收到的 URL 不在我的控制范围内 URL 按照 RFC2396 中的定义进行有效转义 如何将其转换为 Java File 对象 有趣的是 URL getFile 方法返回一个字符串 而不是文件
  • Java AES 128 加密方式与 openssl 不同

    我们遇到了一种奇怪的情况 即我们在 Java 中使用的加密方法会向 openssl 生成不同的输出 尽管它们在配置上看起来相同 使用相同的键和 IV 文本 敏捷的棕色狐狸跳过了懒狗 加密为 Base64 字符串 openssl A8cMRI
  • JAVA - Xuggler - 组合 MP3 音频文件和 MP4 电影时播放视频

    使用 JAVA 和 Xuggler 以下代码组合 MP3 音频文件和 MP4 电影文件并输出组合的 mp4 文件 我希望在合并音频和视频文件时应自动播放输出视频文件 String inputVideoFilePath in mp4 Stri
  • wait() 在游戏中如何工作?

    在 playframework 的文档中here http www playframework org documentation 1 2 1 asynchronous已写 public static void loopWithoutBlo
  • 如何在不超过最大值的情况下增加变量?

    我正在为学校开发一个简单的视频游戏程序 我创建了一个方法 如果调用该方法 玩家将获得 15 点生命值 我必须将生命值保持在最大值 100 并且由于我目前的编程能力有限 我正在做这样的事情 public void getHealed if h
  • 当从服务类中调用时,Spring @Transactional 不适用于带注释的方法

    在下面的代码中 当方法内部 是从内部调用的方法外部 应该在交易范围内 但事实并非如此 但当方法内部 直接从调用我的控制器class 它受到事务的约束 有什么解释吗 这是控制器类 Controller public class MyContr
  • 如何安全地解决这个 Java 上下文类加载器问题?

    我的数百名用户中只有一位在启动我的 Java 桌面应用程序时遇到问题 他只有大约三分之一的时间开始 另外三分之二的时间在启动时抛出 NullPointerException Exception in thread AWT EventQueu
  • 画透明圆,外面填充

    我有一个地图视图 我想在其上画一个圆圈以聚焦于给定区域 但我希望圆圈倒转 也就是说 圆的内部不是被填充 而是透明的 其他所有部分都被填充 请参阅这张图片了解我的意思 http i imgur com zxIMZ png 上半部分显示了我可以
  • 匿名类上的 NotSerializedException

    我有一个用于过滤项目的界面 public interface KeyValFilter extends Serializable public static final long serialVersionUID 7069537470113
  • 将 SignedHash 插入 PDF 中以进行外部签名过程 -workingSample

    遵循电子书第 4 3 3 节 PDF 文档的数字签名 https jira nuxeo com secure attachment 49931 digitalsignatures20130304 pdf 我正在尝试创建一个工作示例 其中 客
  • Java 中的“Lambdifying”scala 函数

    使用Java和Apache Spark 已用Scala重写 面对旧的API方法 org apache spark rdd JdbcRDD构造函数 其参数为 AbstractFunction1 abstract class AbstractF
  • 如何在 Java 中测试一个类是否正确实现了 Serialized(不仅仅是 Serialized 的实例)

    我正在实现一个可序列化的类 因此它是一个与 RMI 一起使用的值对象 但我需要测试一下 有没有办法轻松做到这一点 澄清 我正在实现该类 因此在类定义中添加 Serialized 很简单 我需要手动序列化 反序列化它以查看它是否有效 我找到了
  • Javafx过滤表视图

    我正在尝试使用文本字段来过滤表视图 我想要一个文本字段 txtSearch 来搜索 nhs 号码 名字 姓氏 和 分类类别 我尝试过在线实施各种解决方案 但没有运气 我对这一切仍然很陌生 所以如果问得不好 我深表歉意 任何帮助将不胜感激 我
  • Jersey 客户端请求中未设置 Content-Length-Header

    我正在使用 Jersey Client 访问网络服务 如下所示 response r accept MediaType TEXT PLAIN TYPE header content length 0 post String class 其中
  • 如何在JSTL中调​​用java方法? [复制]

    这个问题在这里已经有答案了 这可能是重复的问题 我只想调用不是 getter 或 setter 方法的方法例如 xyz 类的 makeCall someObj stringvalue Java类 Class XYZ public Strin
  • hashcode 的默认实现为以相同方式构造的对象返回不同的值

    我在这里编写一个示例代码 public class Test private int i private int j public Test TODO Auto generated constructor stub public Test
  • GUI Java 程序 - 绘图程序

    我一直试图找出我的代码有什么问题 这个想法是创建一个小的 Paint 程序并具有红色 绿色 蓝色和透明按钮 我拥有我能想到的让它工作的一切 但无法弄清楚代码有什么问题 该程序打开 然后立即关闭 import java awt import

随机推荐

  • 超详细 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 的数目相同 则必须将它们按照数值大小升序排列 请你返回排序后的数组 示例