0

我是编程新手,我正在用 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());
    }

谢谢!

4

3 回答 3

0

As @WJS posted, a nested loop is a simple, but slow solution - it's time complexity is O(n^2). You could use a single loop to achieve same result, but with O(n) complexity: notice, how you can express the sum as 1 * (3 + 5 + 7) + 3 * (5 + 7) + 5 * 7: the left multiplier is current index position, and the sum in the left multiplier is previous suffix 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-21T16:32:37.040 回答
0
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);
    }
}
于 2021-01-21T16:41:12.650 回答
0

这些方法是根据您的隐含要求提供的,即您必须明确地将每对元素相乘并取它们的总和。还有其他更有效的方法来实现总和。

你需要一个嵌套循环。

  • 外循环从 开始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-21T16:06:18.973 回答