有什么方法可以使此列表中的第一个元素和最后一个元素相乘?

时间:2019-01-30 04:56:55

标签: java arraylist linked-list

我正在尝试将此列表的第一个元素乘以最后一个元素,然后将第二个第一个元素乘以第二个最后一个元素,依此类推。我有更好的方法吗?试图这样做,但是我在内部循环中读了3次相同的元素。

    long sum = 0;
    long temp = 0;

    for (int i = 0; i < list.size() / 2; i++) {

        for (int j = list.size() - 1; j >= list.size() / 2; j--) {

            temp = list.get(j) * list.get(i);
            sum += temp;
        }

    }

4 个答案:

答案 0 :(得分:1)

首先循环遍历从0到数组长度一半的索引。然后将索引处的项目与array length - index - 1处的项目相乘。

for(int index = 0; index < (list.size() / 2); index++) {
    sum += (list.get(index) * list.get(list.size() - index - 1));
}

答案 1 :(得分:1)

正如您所提到的,您不会处理奇数元素,这会起作用

        long sum=0;
        long temp=0;
        for(int i=0;i<list.size()/2;i++)
        {
            temp=list.get(i)*list.get(list.size()-i-1);
            sum+=temp;
        }

答案 2 :(得分:1)

使用Java-8 API,您可以使用IntStream遍历List索引,并使用reduce将第一个和最后一个元素相乘并将其累加起来。

public static void main(String[] args) {
       List<Integer> list = Arrays.asList(1,2,3,4,5,6);
       int size = list.size() - 1;
       System.out.println(IntStream.range(0, list.size()/2).reduce(0, (acc, ele) ->  { acc += list.get(ele) * list.get(size - ele); return acc;}));
} 

答案 3 :(得分:0)

这有效:

int i = list.size() / 2;
int j = list.size() - 1;
while (i < list.size() / 2) {

    while ( j >= list.size() / 2;) {

        temp = list.get(j) * list.get(i);
        sum += temp;
        j--;
        break;
    }

    i++;
  }