给你一个整数数组 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]

提示:0 <= arr[i] <= 10^4

题解:
循环并使用Integer.bitCount计算数字中1的个数,乘以10000000(题目中不会大于10^4)然后加上原数字,放入数组map中,并对map进行排序,最后% 10000000获取原来的数组,填充到原数组返回即可

因为题目中arr中数字不会大于10^4即不会大于10000,让个数乘以100000后+原来的数字,排序后就是按照个数排序,个数相同时,arr[i]不同也会排序。
最后除以100000取余,因为arr[i]远远小于100000,所以arr[i]是余数,就能输出原来的数组了!

class Solution {public int[] sortByBits(int[] arr) {int count = 0;int[] temp = new int[arr.length];for(int i = 0;i<arr.length;i++){temp[i] = Integer.bitCount(arr[i]) * 100000 + arr[i];}Arrays.sort(temp);for (int i = 0; i < temp.length; i++) {temp[i] = temp[i] % 100000;}return temp;}
}

遇到根据某个变量个数比较大小,变量个数一样比较变量大小时的技巧相关推荐

  1. 学计算机电脑屏幕小可以吗,电脑屏幕大小怎么调好 设置桌面大小时要注意哪些要点...

    电脑屏幕要在合适的时候看起来才会比较舒服的,有很多人都找适合自己电脑屏幕大小设置,至于图片或大或小,这个要根据自己的需求来设置.下面小编就来给大家介绍一下电脑屏幕大小怎么调好及设置桌面大小时要注意哪些 ...

  2. python将输入的n个数进行大小排序:小到大和大到小

    1.从小到大排序 输入格式 第一行为一个整数n. 第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000. 输出格式 输出一行,按从小到大的顺序输出排序后的数列. 源码: a = int(i ...

  3. 编程题:两个数比较大小,之后用变量t互换。

    编程题:两个数比较大小,之后用变量t互换. #include<stdio.h> void main() { float x,y,t; scanf("%f,%f",&am ...

  4. c语言指针变量字节,C语言指针变量类型和大小

    指针变量作为C语言中的特殊数据类型,除了用于存储内存地址之外,它与其他类型比较是否具有其他特点呢?接下来对指针类型进行分析,剖析指针类型的特点. 指针的大小与其指向的内存中存储的变量类型无关,它只与计 ...

  5. 用按位异或运算符交换两个数,不引入第三个变量

    2019独角兽企业重金招聘Python工程师标准>>> 用按位异或运算符交换两个数,不引入第三个变量 void swap(int &a , int &b) { a = ...

  6. Java实验——设计一个数组模型,用于存储体育项目成绩男生体育项目有足球、长跑和铅球,女生体育项目有跳舞、体操、游泳。设计排序算法,将变量a、b、c中的数值按大小顺利进行互换(从大到小排列)。

    设计一个数组模型,用于存储体育项目成绩:男生体育项目有足球.长跑和铅球,女生体育项目有跳舞.体操.游泳. import java.util.Scanner;public class DataArray ...

  7. pandas使用goupby函数和nunique函数计算每个分组对应的多个变量的独特值的个数( unique values of each group in dataframe)

    pandas使用goupby函数和nunique函数计算每个分组对应的多个变量的独特值的个数( unique values of each group in dataframe) 目录

  8. 【Scala】使用Scala语言定义函数和函数使用(比较两个数的大小代码)

    定义比较两个数的大小的函数* 下面定义的是Scala的一些基本代码以及详细的解释: object FunDemo1 {def main(args: Array[String]): Unit = {va ...

  9. C语言三个数比较大小

    C语言三个数比较大小 1.常规算法进行比较 利用中间一个过渡变量进行判断,具体代码如下: #include <stdio.h> void main() {int x,y,z,tmp;pri ...

最新文章

  1. ubuntu18 搜狗输入法 解决版
  2. pandas移除dataframe字符串数据列中的前N个字符(remove the first n characters from values from column of dataframe)
  3. 无线网络未来十年十大产业趋势
  4. 【黑客免杀攻防】读书笔记4 - 壳在免杀中的应用
  5. java 防止文件下载_Spring,Java:流式文件下载以避免内存不足错误
  6. Open WebRTC Toolkit实时视频分析系统
  7. flex布局_Flex布局,真香
  8. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第12篇]椭圆曲线上的群理论是什么
  9. FLASH AS3 TextField
  10. 关于MySQL的存储函数(自定义函数)的定义和使用方法详解
  11. 开放API 与 查询语言GraphQL
  12. Python之父加入微软,一开口就知道是老“凡学家”了
  13. 26.Linux/Unix 系统编程手册(上) -- 监控子进程
  14. JS中 post和get的区别
  15. 数据库实验五-数据库设计实验
  16. 前端应届生面试技巧,没有项目经验怎么应对?
  17. Android——给button添加图片
  18. 【NVivo教程】使用Nvivo扩展文献综述
  19. 解决ERROR: Cannot uninstall ‘llvmlite‘. It is a distutils installed project and thus we cannot
  20. 【多目标优化求解】基于matlab非支配排序灰狼优化(NS-GWO)算法求解多目标优化问题【含Matlab源码 2015期】

热门文章

  1. sharepoint 2016 学习系列篇(4)-如何部署sharepoint server 2016(3)-Sharepoint服务器安装和部署
  2. Promox VE 一款不错的开源虚拟化软件
  3. jquery图片放大
  4. 树莓派开机自动连接WiFi 及树莓派设置固定IP地址
  5. php百度短网址dwz.cn接口
  6. 打字机插件 Typeface Animator
  7. 实时对讲是怎么发起的_微信对讲机怎么用【详细介绍】
  8. SCSI介绍和SCSI命令承载于各类总线的方式
  9. 详解新浪微博登录第三方网站
  10. 4600u黑苹果 r5_联想G50-70AT-ISE上黑苹果成功,分享经验和clover配置。