私はちょうど私のコーディングスキルを向上させるHackerRankに練習を開始しています。私はほとんど私の好みの言語としてのJavaを使用しています。私はこの質問を持っている、と私は解決策を与えるために最高の私のレベルを試してみましたが、すべてのテストケースをクリアしませんでした。私は5 15アウトテストケースをクリアしてきたが、それでも10例が行われるように残されています。hackerrank上にある人は、このリンクをたどって質問を見ることができます:最小-最大合計
私はとにかく、質問の簡単な説明を与えています:
問題文
5つの正の整数を考えると、正確に4つ5つの整数のを加算することにより算出することができ、最小値と最大値を見つけます。次に、2つのスペースで区切られた長整数の単一線としてそれぞれ最小値と最大値を印刷します。
たとえば、arr=[1,3,5,7,9]
。私たちの最小合計である1+3+5+7=16
と私たちの最大の合計です3+5+7+9=24
。私たちは、印刷し16 24
出力フォーマット
2つのそれぞれの最小値を表すスペースで区切られた長整数と5つの整数の正確に4を加算することにより算出することができる最大値を印刷します。(出力は32ビット整数よりも大きくすることができます。)
サンプル入力 1 2 3 4 5
サンプル出力 10 14
説明
私たちの最初の数字があります1, 2, 3, 4, and 5
。私たちは5つの整数の4を使用して、次の合計を計算することができます。
If we sum everything except 1, our sum is 2+3+4+5=14.
If we sum everything except 2, our sum is 1+3+4+5=13.
If we sum everything except 3, our sum is 1+2+4+5=12.
If we sum everything except 4, our sum is 1+2+3+5=11.
If we sum everything except 5, our sum is 1+2+3+4=10.
私の何か
for(i=0; i<arr.length; i++){
totSum += arr[i];
}
sumOne = totSum - arr[0];
sumTwo = totSum - arr[1];
sumThree = totSum - arr[2];
sumFour = totSum - arr[3];
sumFive = totSum - arr[4];
int[] num = {sumOne, sumTwo, sumThree, sumFour, sumFive};
int temp = 0;
for(i=0;i<num.length;i++){
for(int j=1;j<(num.length-i);j++){
if(num[j-1] > num[j]){
//swap elements
temp = num[j-1];
num[j-1] = num[j];
num[j] = temp;
}
}
}
System.out.print(num[0] + " " + num[4]);
また、繰り返し処理であることを行うことができnum array
、かつ最大値と最小値を求めます。
しかし、どういうわけか、すべてがこれをやった後、私はこのモジュールをクリアしないでください。
注意してください: ARRの要素数が5のみであると固定されています。
私は10に障害が発生した間、私はこのようなものですつのテストケース、について知るようになったことを知って持っています:
入力(stdin) 256741038 623958417 467905213 714532089 938071625
予想される出力 2063136757 2744467344
(あなただけのその最大値と最小値を必要とするので、配列をソートすることは、やり過ぎのビットですが)あなたは正しい考えを持っていますが、これらの大きな整数を合計するとき、あなたはオーバーフローsumtot
変数を、間違った答えを得ます。使用してlong
問題を解決しなければならない代わりに、秒:
long totSum = 0;
for(int i=0; i<arr.length; i++){
totSum += arr[i];
}
long sumOne = totSum - arr[0];
long sumTwo = totSum - arr[1];
long sumThree = totSum - arr[2];
long sumFour = totSum - arr[3];
long sumFive = totSum - arr[4];
long[] num = {sumOne, sumTwo, sumThree, sumFour, sumFive};
long temp = 0;
for(int i=0;i<num.length;i++){
for(int j=1;j<(num.length-i);j++){
if(num[j-1] > num[j]){
//swap elements
temp = num[j-1];
num[j-1] = num[j];
num[j] = temp;
}
}
}
System.out.print(num[0] + " " + num[4]);
注、ところで、Javaの8つのを使用してストリーミングすることをあなたは同じロジックを実装することができ定型コードの多くは、同様のO(nlog(n))をソート割引:
IntSummaryStatistics stats = Arrays.stream(arr).summaryStatistics();
System.out.println
((stats.getSum() - stats.getMax()) + " " + (stats.getSum() - stats.getMin()));