HackerRank任务" Mini Max Sum"解决方案没有通过13个测试用例中的3个,有人可以告诉我我做错了什么

时间:2017-07-25 00:26:24

标签: java

这是针对" Mini Max Sum"关于HackerRank的问题,我不明白为什么它在所有测试用例上都没有复选标记。有人能告诉我我的问题在哪里。问题是:

打印两个以空格分隔的长整数,表示可以通过对五个整数中的四个进行求和来计算的相应最小值和最大值。 (输出可以大于32位整数。)

ArrayList<Integer> array = new ArrayList(10);
for(int i = 0; i < 10; ++i){
    array.add(i, i);
}
Collections.shuffle(array,  new Random(10));
for(int i = 0; i < 10; ++i){
    System.out.print(array.get(i));
}

11 个答案:

答案 0 :(得分:1)

这也起作用。谢谢!

static void miniMaxSum(int[] arr) {
    List<Integer> list = Arrays.stream(arr).boxed().collect(Collectors.toList());
    Collections.sort(list); 
    long x=0, y=0;
    for(int j=0;j<(list.size()-1);j++){
            x = x + list.get(j);
            y = y + list.get(j+1);
    }
    System.out.println(x +" "+y);
}

答案 1 :(得分:1)

Unable to parse binding {args: {contents: h2}, command: insert_snippet, key: [option+f1]}

答案 2 :(得分:0)

问题是minmax的初始值。

  1. min正在被重置为循环内的第一个值,因此它可能仅在第一个或最后一个值是最小值时才起作用;

  2. max从零开始,因此如果所有值都为负数,max将保持为零(而不是其中一个输入值)。

  3. 提示:在第一次迭代(min)上设置maxi == 0,或者按照建议,分别使用Integer.MAX_VALUE和Integer.MIN_VALUE作为初始值(实际{{1} longmin不需要},也不需要数组)

答案 3 :(得分:0)

这对我有用。

{{1}}

答案 4 :(得分:0)

以下是该问题的提示:可以由summing exactly four of the five integers计算的最小值和最大值。

只要不对数组进行排序,请先对数组进行排序。取两个for loop,因为我们要使复杂度保持为O(n),即线性。

  1. 1st索引到n - 1。假设索引从0开始。这将为您提供所有元素的总和,但最小的元素将是最大的总和。
  2. 0th索引到n - 2。假设索引从0开始。这将为您提供除最大元素(最小元素)之外的所有元素的和。

比方说,我们的初始数字是1、2、3、4和5。 我们可以使用五个整数中的四个来计算以下总和:

  • 如果我们对除1以外的所有东西求和,我们的总和就是2 + 3 + 4 + 5 = 14。
  • 如果我们对除2以外的所有东西求和,我们的总和就是1 + 3 + 4 + 5 = 13。
  • 如果我们对除3以外的所有东西求和,则我们的总和就是1 + 2 + 4 + 5 = 12。
  • 如果我们对除4以外的所有东西求和,我们的总和就是1 + 2 + 3 + 5 = 11。
  • 如果我们对除5以外的所有东西求和,我们的总和就是1 + 2 + 3 + 4 = 10。

答案 5 :(得分:0)

public static void minmaxsum(int[] ar1) {
    long a, b, c, d, e;

    a = (long) ar1[1] + (long) ar1[2] + (long) ar1[3] + (long) ar1[4];
    System.out.println(a);

    b = (long) ar1[0] + (long) ar1[2] + (long) ar1[3] + (long) ar1[4];
    System.out.println(b);

    c = (long) ar1[0] + (long) ar1[1] + (long) ar1[3] + (long) ar1[4];
    System.out.println(c);

    d = (long) ar1[0] + (long) ar1[1] + (long) ar1[2] + (long) ar1[4];
    System.out.println(d);

    e = (long) ar1[0] + (long) ar1[1] + (long) ar1[2] + (long) ar1[3];
    System.out.println(e);

    long[] df = new long[] { a, b, c, d, e };

    long max = df[0];
    for (int i = 0; i < df.length; i++) {
        if (df[i] > max) {
            max = df[i];
        }
    }

    long min = df[0];
    for (int i = 0; i < df.length; i++) {
        if (df[i] < min) {
            min = df[i];
        }
    }
    System.out.println(min + " " + max);

}

答案 6 :(得分:0)

import math
import os
import random
import re
import sys

def miniMaxSum(arr):
   arr.sort()
   m = sum(arr)
   
   max_num = m - arr[-1]
   min_num = m - arr[0]
   
   print(max_num, min_num)

if __name__ == '__main__':

    arr = list(map(int, input().rstrip().split()))

    miniMaxSum(arr)

答案 7 :(得分:-1)

static void miniMaxSum(int[] arr) {
    long[] longs = Arrays.stream(arr).asLongStream().toArray();

    Arrays.sort(longs);
    long sum = LongStream.of(longs).sum();

    long min = sum - longs[4];
    long max = sum - longs[0];

    System.out.println(min + " " + max);
}

答案 8 :(得分:-1)

此答案为PYTHON语言。我是初学者,欢迎任何改进

n = input().split(" ")
n=list(n)
n1 = list(map(int,n))
n2 = list(map(int,n))
n1.sort()
n1.pop()
min =0
max=0
for i in n1:
min+=i
n2.sort()
n2.reverse()
n2.pop()
for j in n2:
max+=j
print(min, max)

答案 9 :(得分:-1)

这是在JavaScript中对我有用的东西:

var sum = 0;

var arry = [];

function miniMaxSum(arr) {

    for (var i = 0; i < arr.length; i++) {

        for (var j = 0; j < arr.length; j++) {

            if (arr[j] !== arr[i]) {
                sum += arr[j];
            }

        }
        arry.push(sum);

        sum = 0;

    }


    var min = Math.min(...arry);
    var max = Math.max(...arry);

    console.log(min, max);

}

答案 10 :(得分:-1)

在Python3上为我工作!

def miniMaxSum(arr):

    total = sum(arr)
    low = total - min(arr)
    high = total - max(arr)

    print(high, low)

    return