给定1到100之间的数字数组,找到最大x数的总和。如果您在java中有任何解决方案,请告诉我
答案 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)
它非常简单的逻辑。步骤如下所示。
步骤: -
[0]
索引到[Nth]
索引位置的排序数组数据。希望它会对你有所帮助。