SRM402 Div2 500

問題

ある連続した正の整数の並びを1つだけのぞいてバラバラにした数列が与えられる.除かれた可能性のある数字を返す.もしありえないような場合は空の配列を返す.

考え方

ソートして連続した数列のなかで抜けているものを探す.
もし,1個の時はその数値の前後を返す.(1の時は2だけ.0は正の整数でない)
2個以上の時は,ソートして,その最大値maxVと最小値minVの中の数列でぬけているところを探す.
実際に配列に入れてでてきたかどうかチェックして,すべて埋まっている場合はminV-1とmaxV+1を返す.
抜けてる部分が1つの場合はそれを返す.
抜けてる部分が2つ以上ならばあり得ないので空の配列を返す.
配列に入れるときに,同じ数字が出てきた場合もありえないので空の配列を返す.
配列を用意する前にminVとmaxVの差が大きい場合はあり得ないことがわかるので空の配列を返す.

反省

ひっかけ.どんな入力がありえるかをちゃんと考える.
「同じ数字が入力される場合は?」->{1,1,3,4}
「配列を用意するとき,配列を用意できないようなサイズが入力されないか?」->{1,1000000000}