Java 有人能指出代码的错误吗;满足给定求和条件的子序列数;这是给堆栈溢出错误
这就是leetCode问题。我用下面的方法解决了它,但给出了堆栈溢出错误 给定一个整数数组nums和一个整数目标。 返回NUM的非空子序列数,使其上的最小和最大元素之和小于或等于目标。 由于答案可能太大,请以10^9+7的模返回答案。Java 有人能指出代码的错误吗;满足给定求和条件的子序列数;这是给堆栈溢出错误,java,dsa,Java,Dsa,这就是leetCode问题。我用下面的方法解决了它,但给出了堆栈溢出错误 给定一个整数数组nums和一个整数目标。 返回NUM的非空子序列数,使其上的最小和最大元素之和小于或等于目标。 由于答案可能太大,请以10^9+7的模返回答案。 输入:nums=[3,5,6,7],target=9 产出:4 说明:有4个子序列满足该条件。 [3] :最小值+最大值 我想这一行可能会有问题: 不过,我们可以更轻松地解决这个问题,类似地使用sort,然后使用两个指针 使用b.java进行测试: 您好,请
输入:nums=[3,5,6,7],target=9 产出:4 说明:有4个子序列满足该条件。 [3] :最小值+最大值
- 我想这一行可能会有问题:
- 不过,我们可以更轻松地解决这个问题,类似地使用sort,然后使用两个指针
b.java进行测试
:
您好,请您更详细地解释代码试图解决的问题,并展示一些示例输入和输出,好吗?您还可以解释一下解决您试图在代码中实现的问题的一般方法吗?例如,为什么代码使用递归?另外,请整齐地格式化您的代码,以便很容易看到括号是如何排列的。我发现包含数组nums中第一个数字的非子序列和使用递归获得的非零子序列的剩余数量。请提供一个示例来演示此问题。我建议使用硬编码输入。
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);
}
}``
return (int)((res+numSubseq(nums,target,i++))%M);
import java.util.*;
class Solution {
private static final int MOD = (int)1e9 + 7;
public static final int numSubseq(
final int[] nums,
final int target
) {
Arrays.sort(nums);
int[] pows = new int[nums.length];
pows[0] = 1;
int subsequences = 0;
int left = 0;
int right = nums.length - 1;
for (int index = 1 ; index < nums.length ; ++index) {
pows[index] = pows[index - 1] * 2;
pows[index] %= MOD;
}
while (left <= right) {
if (nums[left] + nums[right] > target) {
--right;
} else {
subsequences += pows[right - left++];
subsequences %= MOD;
}
}
return subsequences;
}
}
class b {
public static void main(String[] args) {
System.out.println(new Solution().numSubseq(new int[] {3, 5, 6, 7}, 9));
System.out.println(new Solution().numSubseq(new int[] {3, 3, 6, 8}, 10));
System.out.println(new Solution().numSubseq(new int[] {2, 3, 3, 4, 6, 7}, 12));
System.out.println(new Solution().numSubseq(new int[] {5, 2, 4, 1, 7, 6, 8}, 16));
}
}
4
6
61
127