簡體   English   中英

HackerRank 任務“Mini Max Sum”解決方案未通過 13 個測試用例中的 3 個,有人能告訴我我做錯了什么嗎

[英]HackerRank Task “Mini Max Sum” solution not passing 3 of the 13 test cases, can someone tell me what i'm doing wrong

這是針對 HackerRank 上的“Mini Max Sum”問題,我不明白為什么所有測試用例上都沒有復選標記。 誰能告訴我我的問題出在哪里。 問題是:

打印兩個空格分隔的長整數,分別表示可以通過將五個整數中的四個相加來計算的相應最小值和最大值。 (輸出可以大於 32 位整數。)

public class Solution {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        long[] arr = new long[5];
        long total = 0, max = 0, min = 0;
        for(int arr_i=0; arr_i < 5; arr_i++){
            arr[arr_i] = in.nextLong();
            min = arr[0];
            total += arr[arr_i];
            if (arr[arr_i] > max)
                max = arr[arr_i];
            if (arr[arr_i] <= min)
                min = arr[arr_i];
        }
        System.out.println((total - max) + " " + (total - min));
    }
}

問題是minmax的初始值。

  1. min被重置為循環內的第一個值,因此它可能僅在第一個或最后一個值是最小值時才有效;

  2. max從零開始,因此如果所有值都為負,則max將保持為零(而不是輸入值之一)。

提示:在第一次迭代時設置minmax ( i == 0 ) 或者,按照建議,分別使用 Integer.MAX_VALUE 和 Integer.MIN_VALUE 作為初始值(實際上minmax不需要long ,數組也不需要)

這也奏效了。 謝謝!!

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);
}
static void miniMaxSum(int[] arr) {
       int temp = 0;
      for (int i = 0; i < arr.length; i++) 
        {
            for (int j = i + 1; j < arr.length; j++) { 
                if (arr[i] > arr[j]) 
                {
                    temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }

        long minSum = 0;
        long maxSum = 0;
      for(int i = 1; i< arr.length; i++){
         maxSum = maxSum + arr[i];
      }
      for(int i = 0; i< arr.length-1; i++){
         minSum = minSum + arr[i];
      }
      System.out.print(minSum+ " " +maxSum);
    }

這對我有用。

import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.regex.*;
import java.util.stream.LongStream;

public class Solution {

// Complete the miniMaxSum function below.
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);
}


private static final Scanner scanner = new Scanner(System.in);

public static void main(String[] args) {
    int[] arr = new int[5];

    String[] arrItems = scanner.nextLine().split(" ");
    scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");

    for (int i = 0; i < 5; i++) {
        int arrItem = Integer.parseInt(arrItems[i]);
        arr[i] = arrItem;
    }

    miniMaxSum(arr);

    scanner.close();
   }
}

這是問題中的一個提示:可以通過summing exactly four of the five integers來計算的最小值和最大值。

假設數組未排序,只需先對數組進行排序。 取兩個for loop因為我們希望將復雜度保持在 O(n),即線性。

  1. 1st索引到n - 1 假設 index 從0開始。 這將為您提供所有元素的總和,除了將是最大總和的最小元素。
  2. 0th索引到n - 2 假設 index 從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。
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);

}

在 Python3 上為我工作!

def miniMaxSum(arr):

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

    print(high, low)

    return
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)
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);
}

這個答案是用 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)

這就是在 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);

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM