zoukankan      html  css  js  c++  java
  • 比特位计数

    题目:

      

     思路:

      1 Brian Kernighan算法   x &= (x - 1) 每次可以从最右边擦除一个二进数 1

      2 动态规划 


     (一)代码 Brian Kernighan算法 

    class Solution {
        public int[] countBits(int n) {
    
            //位运算 算法 x &= (x - 1)  每次可以从最右边擦除一个二进数 1
            //Brian Kernighan算法
            int[] res = new int[n+1];
            for(int i = 1 ; i <= n ; i++){
                res[i] = getRes(i);
            }
            return res;
        }
    
        public int getRes(int i){
            int res = 0;
            while(i > 0){
                i &= (i - 1);
                res++;
            }
            return res;
        }
    }

    (二)代码 动态规划 - 最低有效位  不太懂这个

      

    class Solution {
        public int[] countBits(int n) {
            //动态规划
            int[] dp = new int[n+1];
    
            for(int i = 1 ; i <= n ; i++){
                dp[i] = dp[i >> 1] + (i & 1);
            }
    
            return dp;
    
        }
    }

               。。。。。

          

  • 相关阅读:
    JAVA-类加载机制(2)-类加载的过程
    JAVA-类加载机制(1)-生命周期
    StarUML-详解
    JMS-mq-发布/订阅
    JMS-mq-点对点
    Spring-Transcation
    Session-Hibernate
    Session
    Git配置
    Maven配置
  • 原文地址:https://www.cnblogs.com/misscai/p/15011412.html
Copyright © 2011-2022 走看看