首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将元素与列表中的其他元素相乘

将元素与列表中的其他元素相乘
EN

Stack Overflow用户
提问于 2021-01-21 23:59:25
回答 3查看 134关注 0票数 0

我是编程新手,我正在用Java编写一个程序。

如何将列表中的每个元素与列表中的其他元素相乘?1,3,5,7的乘法如下:1*3+1*5+1*7+3*5+3*7+5*7

我该如何为此编写一个算法呢?我知道它是这样的,但我的大脑不能计算出我必须添加/更改什么。

代码语言:javascript
运行
复制
    for (int index = 0; index < list.size(); index++) {
        sum += (list.get(index) * (list.get());
    }

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2021-01-22 00:06:19

这些方法是基于您的隐含要求提供的,即您必须显式地将每对元素相乘并求其和。还有其他更有效的方法来获得总和。

你需要一个嵌套的循环。

外部循环开始于i = 0.

  • the内部循环开始k = i+1 = 1.

  • this确保
  • 不包括每个条目的平方。

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

打印

代码语言:javascript
运行
复制
86

您也可以像这样使用一个增强的for循环作为外部循环。但第一种方法是,imo,更直接。

代码语言:javascript
运行
复制
int sum = 0;
int i = 1; 
for (int v : nums) {
    for (int k = i++; k < nums.size(); k++) {
        sum += v*nums.get(k);
    }
}
票数 0
EN

Stack Overflow用户

发布于 2021-01-22 00:32:37

正如@WJS发布的,嵌套循环是一个简单但缓慢的解决方案-它的时间复杂度是O(n^2)。您可以使用单个循环来实现相同的结果,但具有O(n)复杂性:请注意,如何将和表示为1 * (3 + 5 + 7) + 3 * (5 + 7) + 5 * 7:左侧乘数是当前索引位置,左侧乘数中的和是前一个后缀sum。

代码语言:javascript
运行
复制
long prevSuffixSum = 0, result = 0;
for (int i = nums.size() - 1; i >= 0; i--) {
    long val = nums.get(i);
    result += val * prevSuffixSum;
    prevSuffixSum += val;
}
票数 0
EN

Stack Overflow用户

发布于 2021-01-22 00:41:13

代码语言:javascript
运行
复制
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);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65831115

复制
相关文章

相似问题

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