首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >耗电的google foobar挑战失败第四个测试案例

耗电的google foobar挑战失败第四个测试案例
EN

Stack Overflow用户
提问于 2021-04-11 05:57:09
回答 2查看 1.3K关注 0票数 0

我已经提交了测试,所以这并不违反堆栈溢出准则。我一直在试图解决这个google问题Power Hungry,它的内容如下:

指挥官Lambda的空间站很大。巨大的空间站需要很大的能量。拥有末日设备的大型空间站需要更多的电力。为了满足空间站的电力需求,指挥官Lambda在空间站的外表面安装了太阳能电池板。但是空间站位于类星体量子通量场的中间,这对太阳能电池板造成了巨大的破坏。你和你的追随者小组已经被派去修理太阳能电池板,但是如果你能帮忙的话,你宁愿不立刻把所有的电池板都拆下来,因为他们确实帮助了空间站和所有的设备!您需要在任何给定数组中找出哪些面板集可以脱机修复,同时仍然保持每个数组的最大功率输出量,要做到这一点,首先需要确定每个数组的最大输出值是多少。编写一个函数解决方案(Xs),它接受表示数组中每个面板的功率输出级别的整数列表,并返回这些数字的一些非空子集的最大乘积。例如,如果一个数组包含功率输出电平为2,-3,1,0,-5的面板,则通过取子集xs = 2,xs1 = -3,xs4 = -5,得到乘积2*(-3)*(-5) = 30。因此解(2,-3,1,0,-5)将是"30“。每个太阳能电池板至少有一个,但不超过50个电池板,每个电池板的绝对值不超过1000 (一些电池板的故障严重到耗尽能量,但你知道太阳能电池板的波稳定器有一个诀窍,它可以让你把两个负输出板组合起来,产生其功率值倍数的正输出)。最终的产品可能很大,所以给出解决方案的字符串表示的数字。

语言

要提供Python解决方案,编辑solution.py以提供Solution.java解决方案,编辑Solution.java

测试用例

您的代码应该通过以下测试用例。请注意,它也可能针对此处未显示的隐藏测试用例运行。

- Python案件--

输入:

solution.solution(2,0,2,2,0)

输出:

8

输入:

solution.solution(-2,-3,4,-5)

输出:

60

-爪哇案件--

输入:

Solution.solution({2,0,2,2,0})

输出:

8

输入:

Solution.solution({-2,-3,4,-5})

输出:

60

我用Java编写了下面的代码

代码语言:javascript
运行
复制
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";
}

其中一个测试用例(准确地说是第四个)失败了。我尝试过各种边缘案件,但我不能通过。有人能解释我错过了什么吗?

EN

回答 2

Stack Overflow用户

发布于 2021-04-11 07:34:45

您可以通过单循环完成这一任务:

  • 在数组中迭代
  • ,保持与非零元素的相乘,
  • 同时跟踪最小值负整数。
  • 如果在最终乘积为负数,则除以小值整数。

如下所示:

代码语言:javascript
运行
复制
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();
    }
}

输出:

代码语言:javascript
运行
复制
60

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

票数 3
EN

Stack Overflow用户

发布于 2021-04-11 06:54:56

我的算法如下:

  1. 对数组进行排序。
  2. 计数数组中的负整数数。如果数组中有奇数负数,则保存最大负数的索引。(在数组中,最大的负整数是-2.)
  3. Iterate数组并将所有元素相乘在一起,跳过0(0)的元素,跳过最大的负整数(只有当数组中有奇数个负整数时)。

代码语言:javascript
运行
复制
/*
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存储结果,因为正如问题中所述,结果可能非常大。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67041907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档