【質問】Java「hackerrank」のコーディングテスト
久しぶりの投稿です。
先日、コーディングテストを受けてきました。
自分でも合っているかどうか不安なので優しい有識者様、教えていただけると嬉しいです...
「hackerrank」のコーディングテストでした!
そのため、コンパイルやテストケースはこれでクリアしたのですが正直これで通るのが疑問になったので質問をしております。(現在自分でも解明中)
問題文は下記になります。英語だったため翻訳+私の和訳で補填しています。
問題文ーーーーーーーーーーーーーーーーーーーーーーーー
整数の配列が与えられた場合、順序を変更せずに任意の要素と以前の小さい要素との間に最大差を決定します。これより下位の先行要素がない場合は-1を返します。
例)
arr=[5,3,6,7,4]
arr[0]より前の要素はありません。
arr[1]より小さい値を持つ以前の読み取り値はありません。
arr[2]=6よりも低い値を持つ、以前の読み取り値が2つあります。
◼︎ arr[2] - arr[1] = 6-3-3
◼︎ arr[2] - arr[0] = 6-5=1
arr[3]=7 よりも低い値を持つ、以前の読み取り値が3つあります。
◼︎ arr[3] - arr[2] = 7-6=1
◼︎ arr[3] - arr[1] = 7-3=4
◼︎ arr[3] - arr[0] = 7-5=2
arr[4]=4 よりも低い値を持つ、以前の読み取り値が1つあります。
◼︎ arr[4] - arr[1] = 4-3=1
最大の末尾レコードはarr[3]-arr[1]=4です。
ーーーーーーーーーーーーーーーーーーーーーーーー
私が記述したコード
※問題文しかメモしていなかったのでうろ覚えで書いています...
class Result {
public static int maxTrailing(List<Integer> arr) {
int min=arr.get(0), max=-1;
for(int i=0; i<arr.size(); i++)
{
if(arr.get(i)<min)
min=arr.get(i);
int x = arr.get(i) - min;
if(x!=0 && x>max)
max=x;
}
return max;
}
}
下に続く...下は問題文のテンプレコードが続いています。
問題文の「以前の読み取り値が3つ」という箇所がクリアできていない?のではと思っていたので
テストケースがクリアできないと思っていました。
しかし、テストケースが通ってしまったので不思議に思っています。
書き方も調べれば調べるほどなぜこれでエラーがでなかったのか不思議です。
自分でも支離滅裂な質問だと思っていますが簡単に何を聞きたいかというと、
・このコードで問題文のお題をクリアできているのかどうか。
・このコードはどのようなコードになっているのか。
この2つをお聞きしたいです...