程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了耗电的谷歌 foobar 挑战未能通过第四个测试用例大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决耗电的谷歌 foobar 挑战未能通过第四个测试用例?

开发过程中遇到耗电的谷歌 foobar 挑战未能通过第四个测试用例的问题如何解决?下面主要结合日常开发的经验,给出你关于耗电的谷歌 foobar 挑战未能通过第四个测试用例的解决方法建议,希望对你解决耗电的谷歌 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();
    }
}

注意:这只是一个演示。根据您的需要修复或改进代码。

,

我的算法如下:

  1. 对数组进行排序。
  2. 计算数组中负整数的个数。
  3. 如果数组中有奇数个负整数,则保存最大负数的索引。 (在数{-2,-5} 中,最大的负整数是 -2。)
  4. 迭代数组并将所有元素相乘,跳过为 0(零)的元素并跳过最大的负整数(仅当数组中有奇数个负整数时)。
/*
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,请注明来意。
标签:foobar