栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【LeetCode笔记】No1356根据数字二进制下1的数目排序

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【LeetCode笔记】No1356根据数字二进制下1的数目排序

文章目录

本题要点共两个:要点实现:比较器复习:

比较器的返回值两个比较器 Comparator 和 Comparable 解题代码:
1356. 根据数字二进制下 1 的数目排序 - 力扣(LeetCode) (leetcode-cn.com)

本题要点共两个:
    二进制下1的数目。设置比较器,当1的个数相等时按照原数值进行排序。
要点实现:
    bit[i] = bit[i >> 1] + (i & 1); 表示 i 的二进制中 1 的数量 ,通过 容器new int[10001] 将 本题所有数 的1的数量记载出来。通过比较器实现排序 Collections.sort(l, new Comparator() 重写方法)
比较器复习: 比较器的返回值
comparator反应两个参数的权重。1是前者权重大,-1是后者。最后按照权重由小到大排序。

o1=4, o2=6, 若返回1表示 前者4权重大,4排在后面。

负数:		前者 < 后者 
0:			两者相等 
正数:		前者 > 后者 
两个比较器 Comparator 和 Comparable

相同点: 是java的一个接口, 并且是用来对自定义的类(class)比较大小的

不同点:

Comparable 定义在 Person类的内部:

public class Student implements Comparable{
    @Override
    public int compareTo(Object o) {
        return 0;
    }
}
List list=new ArrayList(10);
使用方法:Collections.sort(list);

Comparator 是定义在Person的外部的

·public class Person{ String name; int age },·

public PersonComparator implements Comparator() {..比较Person的大小..},

public class StudentComparator implements Comparator {
    @Override
    public int compare(Object o1, Object o2) {
        return 0;
    }
}
List list=new ArrayList(10);
使用方法:Collections.sort(t,new StudentComparator());
解题代码:
public int[] sortByBits(int[] arr) {
        int[] bit = new int[10001];
        List l = new ArrayList<>();
        for (int i : arr) {
            l.add(i);
        }

        for (int i = 0; i < bit.length; i++) {
					 // bit[i]= bit[i>>2] + (i & 3); 不成立
            bit[i] = bit[i >> 1] + (i & 1);
        }
        Collections.sort(l, new Comparator() {
            @Override
            public int compare(Integer o1, Integer o2) {
                if(bit[o2]>bit[o1]){
                    return -1;
                }else if(bit[o2]==bit[o1]){
                    return o1-o2;
                }else{
                    return 1;
                }
            }
        });
        int i =0;
        for (Integer integer : l) {
            arr[i++] = integer;
        }
        return arr;
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/749923.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号