我有一个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
请帮助我无法弄清楚我犯了错误的地方
答案 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;
}