我正在玩 codefight,但我真的卡住了 到以下效率问题。
问题:
给定整数 n、l 和 r,找出将 n 表示为两个整数 A 和 B 的和的方式的数量,使得 l ≤ A ≤ B ≤ r。
示例:
对于 n = 6、l = 2 和 r = 4,输出应为
countSumOfTwoRepresentations2(n, l, r) = 2。
只有两种方法可以将 6 写成 A + B,其中 2 ≤ A ≤ B ≤ 4:6 = 2 + 4 和 6 = 3 + 3。
这是我的代码。它通过了所有单元测试但失败了 在隐藏的。有人能以某种方式指导我吗? 提前致谢。
public static int countSumOfTwoRepresentations2(int n, int l, int r) {
int nrOfWays = 0;
for(int i=l;i<=r;i++)
{
for(int j=i;j<=r;j++)
{
if(i+j==n)
nrOfWays++;
}
}
return nrOfWays;
}
最佳答案
嗯,不需要做那么大的计算……很容易计算:
public static int count(int n, int l, int r) {
if (l > n/2)
return 0;
return Math.min(n/2 - l, r - n/2) + ((n%2 == 1) ? 0 : 1);
}
到目前为止,通过了我所有的测试。也适用于正面和负面。
关于java - 找出将 n 表示为两个有边界整数之和的方法的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39860021/