找出数组中最大X数的总和

时间:2014-03-21 19:51:35

标签: arrays algorithm language-agnostic

给定1到100之间的数字数组,找到最大x数的总和。如果您在java中有任何解决方案,请告诉我

3 个答案:

答案 0 :(得分:3)

使用counting sort进行线性运行时:

count = [0,...,0]  
for item in array:
    count[item]++

sum = 0
i = 100
while x > 0:
    take = min(x, count[i])
    x -= take
    sum += i * take
    i--

答案 1 :(得分:1)

只是因为问题在java中提出,尽管Niklas在伪代码中做了它

public static int greatestSum(int[] array, int x) {
   int[] sorted = new int[100];
   for (int item: array)
      sorted[item - 1]++;

   int sum = 0;
   int index = 99;
   //Check index to prevent out of bounds if array.length < x
   while (x > 0  && index >= 0) {
      int totalAvailable = Math.min(sorted[index], x);
      x = x - totalAvailable;
      sum += ((index + 1) * totalAvailable);
      index--;
   }

   return sum;
}

答案 2 :(得分:0)

它非常简单的逻辑。步骤如下所示。

步骤: -

  1. 首先,您需要按相反顺序(Desc)对给定数组进行排序。
  2. 然后传递您想要添加的第N个最高号码。
  3. 然后读取从[0]索引到[Nth]索引位置的排序数组数据。
  4. 在读取数组元素时,使用循环内部的计数器变量应用sum方法。
  5. 希望它会对你有所帮助。