zoukankan      html  css  js  c++  java
  • [LeetCode] 1356. Sort Integers by The Number of 1 Bits

    Given an integer array arr. You have to sort the integers in the array in ascending order by the number of 1's in their binary representation and in case of two or more integers have the same number of 1's you have to sort them in ascending order.

    Return the sorted array.

    Example 1:

    Input: arr = [0,1,2,3,4,5,6,7,8]
    Output: [0,1,2,4,8,3,5,6,7]
    Explantion: [0] is the only integer with 0 bits.
    [1,2,4,8] all have 1 bit.
    [3,5,6] have 2 bits.
    [7] has 3 bits.
    The sorted array by bits is [0,1,2,4,8,3,5,6,7]
    

    Example 2:

    Input: arr = [1024,512,256,128,64,32,16,8,4,2,1]
    Output: [1,2,4,8,16,32,64,128,256,512,1024]
    Explantion: All integers have 1 bit in the binary representation, you should just sort them in ascending order.
    

    Example 3:

    Input: arr = [10000,10000]
    Output: [10000,10000]
    

    Example 4:

    Input: arr = [2,3,5,7,11,13,17,19]
    Output: [2,3,5,17,7,11,13,19]
    

    Example 5:

    Input: arr = [10,100,1000,10000]
    Output: [10,100,10000,1000]

    Constraints:

    • 1 <= arr.length <= 500
    • 0 <= arr[i] <= 10^4

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

    题意很简单,对于每个数字,我们计算其二进制表达中的1的个数,根据1出现的多少对数组进行排序。对于两个二进制表达中1的数量相同的数字,我们再按照其十进制的表达由大到小排序。

    这道题不涉及算法,就是按这个规则实现排序即可。注意代码第八行为什么要乘以10000,是因为input的范围最大也就到10000(引用)。

    时间O(nlogn)

    空间O(n)

    Java实现

     1 class Solution {
     2     public int[] sortByBits(int[] arr) {
     3         Integer[] a = new Integer[arr.length];
     4         for (int i = 0; i < a.length; i++) {
     5             a[i] = arr[i];
     6         }
     7         // Arrays.sort(a, (i, j) -> Integer.bitCount(i) != Integer.bitCount(j) ? Integer.bitCount(i) - Integer.bitCount(j) : i - j);
     8         Arrays.sort(a, Comparator.comparing(i -> Integer.bitCount(i) * 10000 + i));
     9         for (int i = 0; i < a.length; i++) {
    10             arr[i] = a[i];
    11         }
    12         return arr;
    13     }
    14 }

    LeetCode 题目总结

  • 相关阅读:
    【笔记】黄如花.信息检索.学习心得
    【心得】Lattice和Xilinx工具关键特性对比(Diamond、ISE)
    【导航】FPGA相关
    【笔记】黄如花.信息检索.前4章心得(新增大牛汇总的公开课资源)
    python正则表达式练习题
    python正则表达式(1)--特殊字符
    【转】什么时候 i = i + 1 并不等于 i += 1?
    Linux查看文件指定行数内容
    python mysqldb批量执行语句executemany
    linux命令行常用快捷键
  • 原文地址:https://www.cnblogs.com/cnoodle/p/13934864.html
Copyright © 2011-2022 走看看