gpt4 book ai didi

java - 系列中最大的产品(java)

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:30:32 25 4
gpt4 key购买 nike

我正在尝试找到 3 个相邻数字,这些数字在给定 9 位数字的情况下产生最大乘积。例如,对于数字 198348756,我的解决方案应该返回 [8,7,5],因为它的乘积是 280,并且是可能的最大乘积。我的代码找到了最大乘积,但无法返回创建最大乘积的数字数组。相反,它返回它在 for 循环中检查的最后一个数组。我不明白为什么创建最大乘积的数字数组没有存储在变量结果中?

  public class Solution {
ArrayList<Integer> digits = new ArrayList<>();


/// digits to int array
void tocharArray(String num) {
char[] charArray = num.toCharArray();

for (Character c : charArray) {
digits.add(Character.getNumericValue(c));
}
//System.out.println(digits);
//System.out.println(digits.size());
}


//gets product of array ex [1,2,3] ->6
int arrayproduct(ArrayList<Integer> array) {
int product = 1;
for(int i=0;i < array.size(); i++) {
product = product * array.get(i);
}
return product;
}


ArrayList<Integer> func() {
ArrayList<Integer> three = new ArrayList<>();
ArrayList<Integer> result = new ArrayList<>();


// array of the first 3 digits of the number
for(int index = 0; index < 3;index++) {
three.add(digits.get(index));
}

//initially the max product is the first 3 digits
int maxproduct = arrayproduct(three);
System.out.println(three); //from test [1,9,8]
System.out.println(maxproduct);// from test 72

ArrayList<Integer> copy = three;

for(int j = 3 ; j < digits.size();j++) {

copy.remove(0);
copy.add(digits.get(j));
int next = arrayproduct(copy);
System.out.println(copy);

if(next > maxproduct) {
maxproduct = next;
result = copy;
}
}
System.out.println(maxproduct); // returns 280 which is correct
System.out.println(result); // returns [7,5,6]

return result;

}

public static void main(String[] args) {
String test1 = "198348756";

Solution sol = new Solution();
sol.tocharArray(test1); \\[1,9,8,3,4,8,7,5,6]
sol.arrayproduct(sol.digits); \\returns [7,5,6] which is incorrect
sol.func();
}
}

最佳答案

问题出在这一行:

ArrayList<Integer> copy = three;

您的代码假定 copy嗯,是一个副本,但实际上它是同一个 three别名列表。

您可以通过实际复制列表来修复它:

ArrayList<Integer> copy = new ArrayList<>(three);

同样适用于 result = copy - 它需要是 result = new ArrayList<>(copy)

注意:您可以通过更改 arrayproduct 进一步简化此代码取初始索引和长度。这样您就可以避免创建新列表。一旦找到合适的位置,您就可以通过调用 subList 来制作三元素子范围的副本。 .

关于java - 系列中最大的产品(java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50283991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com