Это проблема leetCode. Я решил это, используя следующий метод, но он дает ошибку переполнения стека.
Дан массив целых чисел и целочисленная цель. Возвращает количество непустых подпоследовательностей чисел, так что сумма минимального и максимального элементов в нем меньше или равна целевому. Поскольку ответ может быть слишком большим, верните его по модулю 10 ^ 9 + 7.
Вход: nums = [3,5,6,7], target = 9 Выход: 4 Пояснение: Есть 4 подпоследовательности, удовлетворяющие состояние. [3]: Мин. Значение + макс. Значение ‹= цель (3 + 3‹ = 9) [3,5]: (3 + 5 ‹= 9) [3,5,6]: (3 + 6‹ = 9) [3,6]: (3 + 6 ‹= 9)
enter code here:
import java.lang.Math;
class Solution {
static int maxIndex=0;
static long M=1000000007;
public int numSubseq(int[] nums, int target) {
Arrays.sort(nums);
maxIndex=nums.length-1;
return numSubseq(nums,target,0);
}
public int numSubseq(int[] nums,int target, int i){
if(target==0 || nums.length==0 || i==nums.length)
return 0;
int res=0;
if(2*nums[i]<=target){
res=1;
if(nums[i]<nums[maxIndex]){
int j=maxIndex;
while(j>i){
if(nums[i]+nums[maxIndex]<=target)
break;
j--;
}
maxIndex=j;
if(nums[i]+nums[maxIndex]<=target && i!=maxIndex)
{
int diffIndex=maxIndex-i;
res+=Math.pow(2,diffIndex)-1;
}
}
}
else{
return 0;
}
return (int)((res+numSubseq(nums,target,i++))%M);
}
}``