代码:
这道题不能用Math.pow 精度不够 得自己写个数组存2的n次方
class Solution {
public int numSubseq(int[] nums, int target) {
int mod = 1000000007;
int n = nums.length;
System.out.println(n);
int[] f = new int[100005];
f[0]=1;
for(int i=1;i<f.length;i++){
f[i] = (f[i-1]<<1)%mod;
}
int cnt = 0;
Arrays.sort(nums);
for(int i=0;i<n;i++){
System.out.println(cnt);
int l=i,r=n-1;
if(nums[r]+ nums[i]<=target){
cnt=(cnt+f[r-i])%mod;
System.out.println((int)Math.pow(2,r-i)%mod);
continue;
}
while(l<r){
int m = l + (r-l)/2;
if(nums[m]+nums[i]<=target){
l = m+1;
}else{
r = m;
}
}
if(r-i-1>=0){
// System.out.println((int)Math.pow(2,r-i-1)%mod);
cnt=(cnt+f[r-i-1])%mod;
}
}
return (int)cnt;
}
}