Java 耗电巨大的谷歌foobar挑战在第四个测试用例中失败
我已经提交了测试,所以这没有违反堆栈溢出准则。 我一直在试图解决google foobar的这个问题,内容如下: 拉姆达指挥官的空间站很大。巨大的空间站需要很大的能量。配备世界末日装置的大型空间站需要更多的电力。为了帮助满足空间站的电力需求,Lambda指挥官在空间站的外表面安装了太阳能电池板。但该站位于类星体量子通量场的中间,这对太阳电池板造成巨大破坏。你和你的追随者团队已经被派去修理太阳能电池板,但是如果你能帮忙的话,你不想一下子把所有的电池板都拆下来,因为他们确实帮助空间站和所有的东西供电 您需要确定任何给定阵列中哪些面板组可以脱机修复,同时仍保持每个阵列的最大功率输出,为此,您首先需要确定每个阵列的最大输出实际是多少。编写一个函数解决方案(xs),它获取一个整数列表,这些整数表示数组中每个面板的功率输出级别,并返回这些数字的一些非空子集的最大乘积。因此,例如,如果一个阵列包含功率输出电平为[2,-3,1,0,-5]的面板,那么通过取子集xs[0]=2,xs[1]=-3,xs[4]=-5可以找到最大乘积,得到乘积2*(-3)*(-5)=30。所以解([2,-3,1,0,-5])将是“30” 每个太阳能电池板阵列包含至少1个且不超过50个电池板,每个电池板将具有绝对值不大于1000的功率输出水平(一些面板故障严重,导致能量耗尽,但您知道面板的波浪稳定器有一个技巧,可以将两个负输出面板组合在一起,以产生其功率值倍数的正输出)。最终产品可能非常大,因此请以数字的字符串表示形式给出解决方案 语言文字 要提供Python解决方案,请编辑solution.py 要提供Java解决方案,请编辑solution.Java 测试用例 您的代码应该通过以下测试用例。 注意,它也可以针对此处未显示的隐藏测试用例运行 --Python案例--Java 耗电巨大的谷歌foobar挑战在第四个测试用例中失败,java,arrays,Java,Arrays,我已经提交了测试,所以这没有违反堆栈溢出准则。 我一直在试图解决google foobar的这个问题,内容如下: 拉姆达指挥官的空间站很大。巨大的空间站需要很大的能量。配备世界末日装置的大型空间站需要更多的电力。为了帮助满足空间站的电力需求,Lambda指挥官在空间站的外表面安装了太阳能电池板。但该站位于类星体量子通量场的中间,这对太阳电池板造成巨大破坏。你和你的追随者团队已经被派去修理太阳能电池板,但是如果你能帮忙的话,你不想一下子把所有的电池板都拆下来,因为他们确实帮助空间站和所有的东西供电
输入:
解决方案。解决方案([2,0,2,2,0])
输出:
八, 输入:
解决方案。解决方案([-2,-3,4,-5])
输出:
六十 --Java案例--
输入:
解决方案。解决方案({2,0,2,2,0})
输出:
八, 输入:
解决方案。解决方案({-2,-3,4,-5})
输出:
六十
我用Java编写了下面的代码
公共静态字符串解决方案(int[]xs){
//你的代码在这里
//对于(inti:xs)System.out.println(i);
int n=xs.length;
如果(n==1){
返回字符串.valueOf(xs[0]);
}
int neg=0,z=0,ans=1,m_neg=Integer.MIN_值;
for(int i:xs){
如果(ii)m_neg:i;
}
}
for(int i:xs){
如果(i==0){
z++;
继续;
}
如果(负%2==1&&i==m_负){
ans*=1;
}
否则{
ans*=i;
}
}
如果(z==n)返回“0”;
如果(负%2==1){
如果(neg==1&&z>0&&z+neg==n)返回“0”;
}
返回ans>0?字符串。valueOf(ans):“0”;
}
其中一个测试用例(准确地说是第四个)失败了。我尝试了各种边缘测试用例,但都无法通过。
有人能解释一下我遗漏了什么吗?我的算法如下:
{-2,-3,4,-5}
中,最大的负整数是-2
)/*
导入java.math.biginger;
导入java.util.array;
*/
公共静态字符串解决方案(int[]xs){
字符串结果=“0”;
如果(xs!=null&&xs.length>0){
if(xs.length==1&&xs[0]0){
结果=product.toString();
}
}
返回结果;
}
我使用
biginger
来存储结果,因为正如问题中所述,结果可能非常大。您可以使用单循环执行此操作:- 迭代数组
- 保持与非零元素相乘
- 同时保持跟踪最小值负整数
- 如果最终乘积为负,则除以小值整数
public class Test {
public static void main(String[] args) throws Exception {
int[] arr = {-2, -3, 4, -5};
System.out.println(solution(arr));
}
public static String solution(int[] xs) {
BigInteger ans = BigInteger.valueOf(1);
int min = Integer.MIN_VALUE;
for (int i = 0; i < xs.length; i++) {
int j = xs[i];
if(j>0)
ans = ans.multiply(BigInteger.valueOf(j));
else if(j<0) {
if(min<j) min = j;
ans = ans.multiply(BigInteger.valueOf(j));
}
}
if(ans.compareTo(BigInteger.ZERO)<0) {
ans = ans.divide(BigInteger.valueOf(min));
}
return ans.toString();
}
}
注意:这只是一个演示。根据您的需要修复或改进代码。您的代码正在为
解决方案生成60
。解决方案({-2,-3,4,-5})
。那么哪个测试用例失败了?有关于这个@onkarruikar隐藏测试用例的答案(第四个)失败。提到不能超过50个电池,最大绝对值为1000。因此,最大绝对功率不能超过50000,这属于int
60