BIT未显示正确的值

时间:2014-12-28 14:04:18

标签: java algorithm

我有一个String,我根据元素的频率创建一个String的BIT 的字符串:

abcdbcaab

代码:

class Test{
static int[][] dp;

    public static void update(int i , int val ,int[] dpp){

         while(i<=100000){

             dpp[i]+=val;
             i+= (i&-i);
         }


    }

    public static int value(int i ,int[] dp){

         int ans =0;

         while(i>0){
             ans+=dp[i];
             i-= (i&i);
         }
         return ans;
    }


    public static void main(String args[] ) throws IOException {

    Scanner in = new Scanner(new InputStreamReader(System.in));

    dp = new int[27][1000001];
    String s  = in.next();
    for(int i=0;i<s.length();i++){
        update(i+1,1,dp[s.charAt(i)-'a']);

    }
    System.out.println(dp[0][7]); // Should show 2 as the frequency of 'a' at 7 position is 2
    }
    }

我做错了。我无法得到它,但是dp [0] [8]正在向我展示3

请帮助我无法弄清楚我犯了错误的地方

1 个答案:

答案 0 :(得分:1)

生活中应该避免消极情绪!但我认为更多的消极性可以改善你的代码: value function你错误地减少了我的价值

public static int value(int i ,int[] dp){

         int ans =0;

         while(i>0){
             ans+=dp[i];
             i-= (i&i);   // Should be (i&-i);
         }
         return ans;
    }