我已经提交了测试,所以这并不违反堆栈溢出准则。我一直在试图解决这个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编写了下面的代码
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";
}其中一个测试用例(准确地说是第四个)失败了。我尝试过各种边缘案件,但我不能通过。有人能解释我错过了什么吗?
发布于 2021-04-11 07:34:45
您可以通过单循环完成这一任务:
如下所示:
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注:这只是一个演示。根据您的需要修复或改进代码。
发布于 2021-04-11 06:54:56
我的算法如下:
-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存储结果,因为正如问题中所述,结果可能非常大。
https://stackoverflow.com/questions/67041907
复制相似问题