我是编程新手,我正在用Java编写一个程序。
如何将列表中的每个元素与列表中的其他元素相乘?1,3,5,7的乘法如下:1*3+1*5+1*7+3*5+3*7+5*7
我该如何为此编写一个算法呢?我知道它是这样的,但我的大脑不能计算出我必须添加/更改什么。
for (int index = 0; index < list.size(); index++) {
sum += (list.get(index) * (list.get());
}
谢谢!
发布于 2021-01-22 00:06:19
这些方法是基于您的隐含要求提供的,即您必须显式地将每对元素相乘并求其和。还有其他更有效的方法来获得总和。
你需要一个嵌套的循环。
外部循环开始于i = 0
.
k = i+1 = 1
.
List<Integer> nums = List.of(1,3,5,7);
int sum = 0;
for (int i = 0; i < nums.size(); i++) {
for (int k = i+1; k < nums.size(); k++) {
sum += nums.get(i)*nums.get(k);
}
}
System.out.println(sum);
打印
86
您也可以像这样使用一个增强的for循环作为外部循环。但第一种方法是,imo,更直接。
int sum = 0;
int i = 1;
for (int v : nums) {
for (int k = i++; k < nums.size(); k++) {
sum += v*nums.get(k);
}
}
发布于 2021-01-22 00:32:37
正如@WJS发布的,嵌套循环是一个简单但缓慢的解决方案-它的时间复杂度是O(n^2)
。您可以使用单个循环来实现相同的结果,但具有O(n)
复杂性:请注意,如何将和表示为1 * (3 + 5 + 7) + 3 * (5 + 7) + 5 * 7
:左侧乘数是当前索引位置,左侧乘数中的和是前一个后缀sum。
long prevSuffixSum = 0, result = 0;
for (int i = nums.size() - 1; i >= 0; i--) {
long val = nums.get(i);
result += val * prevSuffixSum;
prevSuffixSum += val;
}
发布于 2021-01-22 00:41:13
public class Main {
public static void main(String[] args) {
List<Integer> ints = new LinkedList<>(Arrays.asList(-1,3,5,7));
Integer total = 0;
for (int i = 0 ; i < ints.size() ; i++){
int counter = 1;
while (counter < ints.size() - i){
total += ints.get(i) * ints.get(i+counter);
counter ++;
}
}
System.out.println(total);
}
}
https://stackoverflow.com/questions/65831115
复制相似问题