1356. 根据数字二进制下 1 的数目排序 golang
golang的自定义排序
- 根据数字二进制下 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 ,所以你需要按照数值大小将它们排序。
代码
golang的自定义排序
package mainimport ("fmt""sort"
)type NumList []intvar m map[int]intfunc sortByBits(arr []int) []int {m = make(map[int]int, len(arr))for i := 0; i < len(arr); i++ {if _, ok := m[arr[i]]; !ok {m[arr[i]] = getOneCount(arr[i])}}sort.Sort(NumList(arr))return arr
}func (this NumList) Less(i, j int) bool {if m[this[i]] == m[this[j]] {return this[i] < this[j]} else {return m[this[i]] < m[this[j]]}
}func (this NumList) Swap(i, j int) {this[i], this[j] = this[j], this[i]
}func (this NumList) Len() int {return len(this)
}func getOneCount(num int) int {count := 0for num != 0 {if num&1 == 1 {count++}num >>= 1}return count
}func main() {arr := []int {0,1,2,3,4,5,6,7,8}fmt.Println(sortByBits(arr))
}
拓展阅读
https://studygolang.com/articles/14520?fr=sidebar
1356. 根据数字二进制下 1 的数目排序 golang相关推荐
- 1356. 根据数字二进制下 1 的数目排序
链接:1356. 根据数字二进制下 1 的数目排序 题解:https://leetcode-cn.com/problems/sort-integers-by-the-number-of-1-bits/ ...
- leetcode 1356. 根据数字二进制下 1 的数目排序(排序)
给你一个整数数组 arr .请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序. 如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列. 请你返回排序后的数组. 示例 ...
- 力扣 根据数字二进制下1的数目排序
力扣 根据数字二进制下1的数目排序 题目描述 给你一个整数数组 arr .请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序. 如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值 ...
- 1356. Sort Integers by The Number of 1 Bits 根据数字二进制下 1 的数目排序
给你一个整数数组 arr .请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序. 如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列. 请你返回排序后的数组. 示 ...
- PHP不包括字母,数字和下划线的webshell
文章目录 前言 知识铺垫 PHP中异或(^)概念 PHP取反(~)概念 不用数字构造数字 用字符串自增,获取字符 webshell php5和7的差异. 不用数字和字母的 shell 非字母.数字的字 ...
- 数字环境下版权制度的主要特点和功能
由中国国家版权局.世界知识产权组织(WIPO)主办的"一带一路"版权国际论坛在成都举行,近200名中外嘉宾就数字环境下版权与创意产业新挑战和新机遇等问题进行经验交流.思想碰撞. 世 ...
- java 校验姓名只能包含中英文_java代码验证用户名,支持中英文(包括全角字符)、数字、下划线和减号 (全角及汉字算两位),长度为4-20位,中文按二位计数...
package com.sangedabuliu.www; import java.util.regex.Matcher; import java.util.regex.Pattern; public ...
- php给定一个起始数字,下标值0,递减的值,求出他所有递减值的开头数字和结尾数字。
php给定一个起始数字,下标值0,递减的值,求出他所有递减值的开头数字和结尾数字.并打印出来 代码如下: //php给定一个起始数字,下标值0,递减的值,求出他所有递减值的开头数字和结尾数字.publ ...
- 『ACM-算法-lowbit』算法竞赛进阶指南--lowbit运算,找到二进制下所有是1的位
写在前面:我们主要还是分享算法的模板,而不是去刨析算法的原理! 主要思想是,对于非负整数n,输出n最低位的1所在位,并不断把n赋值成n-(n&-n),直至n=0. 为了提高效率,我们使用Has ...
最新文章
- Visual C#中的(ListBox)数据绑定
- itextpdf添加表格元素_使用iText填充pdf表单
- 深入了解webservice_概念总结
- erlang精要(2)-数制
- 工作69:发布商品页面
- linux怎么安装git服务器,linux下安装git服务端
- Reactor和Proactor对比以及优缺点 (netty的底层原理reactor模型)
- php保存emoji表情,php保存emoji表情
- Win10下安装EPLAN P8 2.3时虚拟狗安装需要驱动数字签名的解决过程
- 维智WSD-A2系列伺服驱动器用户手册(MECHATROLINK-Ⅱ总线通信型)
- 基于Spring Boot的人力资源管理系统
- 如何加减单元格指定数字_表格怎么自动计算加减
- vue-admin-better前端页面-菜单-权限配置
- SQL对象名无效的解决
- 治疗便秘的30种秘方
- Bandizip 7.16和winRAR在文件右键压缩功能上的差异
- macOS Monterey 如何设置PPT演讲者模式实现电脑看备注投影看播放内容
- 一个定语修饰两个并列的名词。
- Redis数据结构Set应用场景--黑名单校验器、京东与支付宝抽奖、微博榜单与QQ群的随机展示、帖子点赞、关注与粉丝、微关系计算、HyperLogLog的入门使用
- 《管理学》第九章 沟通