[解決済み] 与えられた数列の中に現れない最小の正の整数を求めよ。
2022-02-07 03:48:24
質問
以下のCodilityで問題を解決しようとしています。
関数を書いてください。
class Solution { public int solution(int[] A); }
N 個の整数の配列 A が与えられたとき、A に含まれない最小の正の整数(0 より大きい)を返すもの。
例えば、A = [1, 3, 6, 4, 1, 2]とすると、この関数は5を返すはずです。
Given A = [1, 2, 3], the function should return 4.
Given A = [−1, −3], the function should return 1.
と仮定する。
Nは[1..100,000]の範囲にある整数である。 配列Aの各要素は [-1,000,000..1,000,000] の範囲にある整数である。 複雑である。
最悪の場合の予想時間計算量はO(N)である。 予想される最悪の場合の空間の複雑さはO(N) (入力引数のために必要なストレージは考慮しない)です。
以下の解答を書くと、低い性能になりますが、バグが見当たりません。
public static int solution(int[] A) {
Set<Integer> set = new TreeSet<>();
for (int a : A) {
set.add(a);
}
int N = set.size();
int[] C = new int[N];
int index = 0;
for (int a : set) {
C[index++] = a;
}
for (int i = 0; i < N; i++) {
if (C[i] > 0 && C[i] <= N) {
C[i] = 0;
}
}
for (int i = 0; i < N; i++) {
if (C[i] != 0) {
return (i + 1);
}
}
return (N + 1);
}
スコアはここで提供されます。
今後も自分で調べてみますが、もっとよく見えるようでしたらお知らせください。
解決方法は?
予想される実行時間がリニアであるべきなら
TreeSet
は、入力をソートするため
O(NlogN)
. したがって
HashSet
を必要とする。
O(N)
を追加する時間
N
要素を使用します。
それに、4つのループは必要ありません。正の入力要素をすべて
HashSet
(1回目のループ)、そしてそのSetに含まれない最初の正の整数を見つける(2回目のループ)。
int N = A.length;
Set<Integer> set = new HashSet<>();
for (int a : A) {
if (a > 0) {
set.add(a);
}
}
for (int i = 1; i <= N + 1; i++) {
if (!set.contains(i)) {
return i;
}
}
関連
-
[解決済み】Quickselectの時間の複雑さを説明する
-
[解決済み] CLRSの相対的漸近成長に関する問題(表)の解き方について教えてください。
-
[解決済み] 解いてみてください。T(n) = T(n-1) + n [重複] とする。
-
[解決済み] 複雑さ O(log(n)) は O(sqrt(n)) と同等か?
-
[解決済み] アルゴリズムと関数の違いは何ですか?[クローズド]
-
[解決済み] 最小ボトルネックスパニングツリーと最小スパニングツリーはどう違うのですか?
-
[解決済み] 与えられた数列の中に現れない最小の正の整数を求めよ。
-
[解決済み] あるアルゴリズムの計算量がO(log log n)になる原因は何でしょうか?
-
[解決済み] 簡単な面接問題が難しくなった:1~100の数字が与えられたとき、ちょうどk個の数字が欠けていることを見つけなさい。
-
[解決済み] 40 億の整数以外の整数を生成する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Quickselectの時間の複雑さを説明する
-
[解決済み】クイックソートとヒープソートの比較
-
[解決済み] アルゴリズムAの実行時間は少なくともO(n²)である - なぜ無意味なのか?
-
[解決済み] 構造的再帰と生成的再帰はどのように違うのですか?
-
[解決済み] NPとco-NPの違いは何ですか?
-
[解決済み] 素朴な」アルゴリズムとは何か、「閉じた」解とは何か?
-
[解決済み] 簡単:T(n)=T(n-1)+nを反復法で解く。
-
[解決済み] 再帰性 T(n) = T(n^(1/2)) + 1
-
[解決済み] log(n!)=Θ(n-log(n))でしょうか?
-
[解決済み] クイックソートとマージソートの比較 [重複]。