大佬教程收集整理的这篇文章主要介绍了耗电的谷歌 foobar 挑战未能通过第四个测试用例,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经提交了测试,所以这不违反 Stack Overflow 准则。 我一直在尝试解决这个 Google foobar 问题 Power Hungry,其内容如下:
Lambda 指挥官的空间站很大。巨大的空间站需要大量电力。配备世界末日设备的巨大空间站需要更多电力。为了帮助满足车站的电力需求,Lambda 指挥官在车站的外表面上安装了太阳能电池板。但该站位于类星体量子通量场的中间,这对太阳能电池板造成了严重破坏。您和您的追随者团队已被指派修理太阳能电池板,但如果您能帮忙,您宁愿不要立即取下所有的太阳能电池板,因为它们确实有助于为空间站供电!
您需要确定任何给定阵列中的哪些面板组可以离线修复,同时仍保持每个阵列的最大功率输出量,要做到这一点,您首先需要弄清楚最大功率是多少每个数组的输出实际上是。编写一个函数解决方案(xs),它采用一个整数列表,表示数组中每个面板的功率输出水平,并返回这些数字的某个非空子集的最大乘积。因此,例如,如果阵列包含功率输出级别为 [2,-3,1,-5] 的面板,则将通过取子集找到最大乘积:xs[0] = 2,xs[1 ] = -3,xs[4] = -5,得到乘积 2*(-3)*(-5) = 30。所以解([2,-5]) 将是“ 30"。
每个太阳能电池板阵列包含至少 1 个且不超过 50 个电池板,并且每个电池板的绝对值不大于 1000 的功率输出水平(有些电池板故障非常严重,它们正在消耗能量,但是您知道面板的波形稳定器的一个技巧,它可以让您将两个负输出面板组合起来,以产生其功率值倍数的正输出)。最终的乘积可能非常大,因此请以数字的字符串表示形式给出解决方案。
要提供 Python 解决方案,请编辑 solution.py 要提供 Java 解决方案,请编辑 Solution.java
您的代码应通过以下测试用例。 请注意,它也可能针对此处未显示的隐藏测试用例运行。
-- Python 案例--
输入:
解决方案([2,2,0])
输出:
8
输入:
解决方案.solution([-2,4,-5])
输出:
60
-- Java 案例--
输入:
Solution.solution({2,0})
输出:
8
输入:
Solution.solution({-2,-5})
输出:
60
我用Java编写了以下代码
public static String solution(int[] xs) {
// Your code here
// for(int i:xs)System.out.println(i);
int n=xs.length;
if(n==1){
return String.valueOf(xs[0]);
}
int neg=0,z=0,ans=1,m_neg=Integer.min_value;
for(int i:xs){
if(i<0){
neg++;
m_neg=m_neg>i?m_neg:i;
}
}
for(int i:xs){
if(i==0){
z++;
conTinue;
}
if(neg%2==1 && i==m_neg){
ans*=1;
}
else{
ans*=i;
}
}
if(z==n) return "0";
if(neg%2==1){
if(neg==1 && z>0 && z+neg==n) return "0";
}
return ans>0?String.valueOf(ans):"0";
}
其中一个测试用例(准确地说是第四个)失败了。我尝试了各种边缘情况,但我无法通过。 谁能解释一下我错过了什么?
你可以用单循环来做到这一点:
像这样:
dart migrate
输出:
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();
}
}
注意:这只是一个演示。根据您的需要修复或改进代码。
,我的算法如下:
{-2,-5}
中,最大的负整数是 -2
。)/*
import java.math.bigInteger;
import java.util.Arrays;
*/
public static String solution(int[] xs) {
String result = "0";
if (xs != null && xs.length > 0) {
if (xs.length == 1 && xs[0] <= 0) {
return result;
}
Arrays.sort(xs);
int i = 0;
while (xs[i++] < 0) {
}
if (--i % 2 == 1) {
--i;
}
else {
i = -1;
}
BigInteger product = new BigInteger("1");
int count = 0;
for (int j = 0; j < xs.length; j++) {
if (xs[j] != 0 && j != i) {
count++;
product = product.multiply(new BigInteger(String.valueOf(xs[j])));
}
}
if (count > 0) {
result = product.toString();
}
}
return result;
}
我使用 BigInteger
来存储结果,因为正如问题中所述,结果可能非常大。
以上是大佬教程为你收集整理的耗电的谷歌 foobar 挑战未能通过第四个测试用例全部内容,希望文章能够帮你解决耗电的谷歌 foobar 挑战未能通过第四个测试用例所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。