美文网首页
2021.3.3每日一题

2021.3.3每日一题

作者: Yaan9 | 来源:发表于2021-03-03 09:09 被阅读0次

338. 比特位计数

给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。
示例 1:

输入: 2
输出: [0,1,1]

示例 2:

输入: 5
输出: [0,1,1,2,1,2]

题解

方法一:
Integer包装类静态方法:

    public int[] countBits(int num) {
        int[] res = new int[num + 1];
        for (int i = 0; i < res.length; i++) {
            res[i] = Integer.bitCount(i);
        }
        return res;
    }

方法二:动态规划
1、i & (i - 1)可以去掉i最右边的一个1(如果有),因此 i & (i - 1)是比 i 小的,而且i & (i - 1)的1的个数已经在前面算过了,所以i的1的个数就是 i & (i - 1)的1的个数加上1

    public int[] countBits(int num) {
        int[] res = new int[num + 1];
        for (int i = 1; i < res.length; i++) {
            res[i] = res[i & (i - 1)] + 1;
        }
        return res;
    }

2、i >> 1会把最低位去掉,因此i >> 1 也是比i小的,同样也是在前面的数组里算过。当 i 的最低位是0,则 i 中1的个数和i >> 1中1的个数相同;当i的最低位是1,i 中1的个数是 i >> 1中1的个数再加1

    public int[] countBits(int num) {
        int[] bits = new int[num + 1];
        for (int i = 1; i <= num; i++) {
            bits[i] = bits[i >> 1] + (i & 1);
        }
        return bits;
    }

相关文章

  • 2021.3.3每日一题

    338. 比特位计数[https://leetcode-cn.com/problems/counting-bits...

  • Day 4 Project 我的微信好友

    附:每日一题

  • 65.怕眨眼之间,你如烟溜走

    创作于2021.3.3秦岭树

  • 2021.3.3

    我的生日过去了,小时候总期望身边的人能记住我生日,总觉得生日那天身边应该有蛋糕、有最心爱的人。到现在我都没如愿过,...

  • 2021.3.3

    明天要回家了,后天爸爸要做手术,本来得知爸爸终于能做手术了还挺高兴,因为病情终于能可以得到有效的治疗,但今...

  • 2021.3.3

    情绪:回家看到闺女在看电视,仍然有一股怒气,不想跟她说话。只想发火。想好的跟她一起做计划,也没有了心情。其实心理知...

  • 2021.3.3

    今天看了一下四星复审的反馈材料,感觉难度不小,重点是五育并举。明天开始收集材料,把握好“五育并举”。多学习,多思考...

  • 2021.3.3

    今天星期三,一天都没有课,直到第九周才有课,所以早上又是睡到自然醒。醒来后把昨天的衣服全部洗了,把忘记带的被套枕...

  • 2021.3.3

    感赏我现在写感赏日志,不需要发太多力气,随意对待我就可以做好它。感我现在读经典读小爱。我都可以从容的面对。可以轻松...

  • 2021.3.3

    时隔三个多月,又回来了 当时是太忙,真的没有时间记,后来假期又过于平淡,或者是太过于快乐,每天睡前都有各种事情也就...

网友评论

      本文标题:2021.3.3每日一题

      本文链接:https://www.haomeiwen.com/subject/neafqltx.html