对已排序列表中的元素求和,然后将求和的值添加到列表中

时间:2019-06-11 22:57:38

标签: java sorting addition

所以,这是我的问题,我有一个包含这样的列表 [4,7,8,23,41] 我想要的是 4 + 7 = 11,因此应在此列表中添加11,并删除4和7。 那么11 +8 = 19,所以添加了19,应该删除11和8。

  int finalSum=0;
  Collections.sort(myList);

  for(int i =0;i<myList.size();i++)
  {
      for(int j=i+1;i<myList.size();j++)
      {
          int sum = myList.get(i) + myList.get(j);
          myList.remove(i);
          myList.remove(j);
      }
  }

  for(int k=0;k<myList.size();k++)
  {
       finalSum += myList.get(k); 
  }

3 个答案:

答案 0 :(得分:2)

我不确定您想要这样的算法的原因,但是这应该按照您描述的方式进行。

IQueryable

汇总列表中元素的更好方法是:

public static void main(String[] args) {
    List<Integer> myList = new LinkedList<>(Arrays.asList(4,7,8,23,41));
    Collections.sort(myList);
    while (myList.size() > 1) {
        myList.add(0, myList.remove(0) + myList.remove(0));
    }
    int finalSum = myList.get(0);
    System.out.println(finalSum);
}

答案 1 :(得分:2)

如果只想获得列表的最终总数,则可以通过迭代整个列表并同时添加每个值来实现。

NavigationView {
        VStack { 
                ...
                NavigationButton(destination: SignUpView(), isDetail: true) {
                    Text("Account erstellen").bold()
                        .frame(minWidth: 0, maxWidth: .infinity)
                        .frame(minHeight: 40).padding(.top, 0)
                        .background(Color.blue)
                        .foregroundColor(.white)
                        .cornerRadius(20)
                }
                ...
        }
        .navigationBarItem(title: Text(""), titleDisplayMode: .inline, hidesBackButton: true)
        .navigationBarHidden(true)
    }

但是,正如您所描述的,您要从列表中添加前两个数字,然后将其删除,将总数添加回列表中,并执行相同的过程,然后我们可以在此处使用PriorityQueue。它可以帮助跟踪升序,并且无论如何我们代码的时间复杂度将为O(n logn),其中n是列表的大小。

for(int k=0;k<myList.size();k++)
{
   finalSum += myList.get(k); 
}

答案 2 :(得分:1)

由于您一直从列表中删除元素,因此可以继续使用索引0。

      List<Integer> list = new ArrayList<>(Arrays.asList(4,7,8,23,41));

      int first = 0;
      while (list.size() > 0) {
         int v = list.remove(0) + first;
         list.add(0, v);
         System.out.println(list);
         first = list.remove(0);
      }

但是,如果这只是您想要的一笔,那是最简单的。

      int sum = list.stream().mapToInt(a -> a).sum();