[解決済み] 要素検索の効率的な方法
2023-04-12 22:40:35
質問
最近、面接を受けたのですが、そこで「quot」という質問をされました。
検索
という質問をされました。
という質問がありました。
正の)整数の配列があり、その各要素は以下のいずれかであるとする。
+1
または-1
は、その隣接する要素と比較して例
array = [4,5,6,5,4,3,2,3,4,5,6,7,8];
ここで検索するのは
7
を検索し、その位置を返します。
こんな回答をしました。
値を一時配列に格納し、ソートしてからバイナリサーチをかけます。
要素が見つかったら、一時配列の中のその位置を返す。
(数字が2回出現している場合は、最初の出現位置を返す)
しかし、この答えには納得がいかなかったようです。
正しい答えは何ですか?
どのように解決するのですか?
1より大きいステップで線形探索を行うことができます。重要な観測は、例えば
array[i] == 4
で7がまだ出現していない場合、7の次の候補はインデックス
i+3
. 次の実行可能な候補に直接行くことを繰り返す while ループを使用します。
少し一般化した実装を示します。これは、最初に現れる
k
を見つけるか(+=1 の制限に従います)、あるいは
-1
となります。
#include <stdio.h>
#include <stdlib.h>
int first_occurence(int k, int array[], int n);
int main(void){
int a[] = {4,3,2,3,2,3,4,5,4,5,6,7,8,7,8};
printf("7 first occurs at index %d\n",first_occurence(7,a,15));
printf("but 9 first \"occurs\" at index %d\n",first_occurence(9,a,15));
return 0;
}
int first_occurence(int k, int array[], int n){
int i = 0;
while(i < n){
if(array[i] == k) return i;
i += abs(k-array[i]);
}
return -1;
}
を出力します。
7 first occurs at index 11
but 9 first "occurs" at index -1
関連
-
g++が内部・外部コマンドソリューションとして認識されない、MinGWを初めて使うときの落とし穴
-
[解決済み] ソートされ回転した配列内の検索
-
[解決済み] MIPSのネストされたForループと配列の使用
-
[解決済み] munmap_chunk(): 無効なポインタ
-
[解決済み] PHPで配列から要素を削除する
-
[解決済み] Java の配列を表示する最も簡単な方法は何ですか?
-
[解決済み] Vimで大文字小文字を区別しない検索をする方法
-
[解決済み] 配列の最初の要素を取得する
-
[解決済み] C言語でオブジェクト指向のコードを書くとしたら、どのようにすればよいのでしょうか?[クローズド]
-
[解決済み] アルゴリズム:配列から重複する整数を削除する効率的な方法
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
C++の配列コピー
-
Solve Dev-c++ [エラー] 'for' ループの初期宣言は、C99 または C11 モードでのみ許可されます。
-
[解決済み] mallocで文字列を確保する
-
[解決済み] C言語の書式指定子 %ul と %lu の違いは何ですか?
-
[解決済み] なぜmemsetではなくbzeroを使用するのですか?
-
[解決済み] C言語の**はどういう意味ですか?
-
[解決済み] C言語でファイルが存在するかどうかを確認する最も良い方法は何ですか?
-
[解決済み] C言語のi++と++iに性能差はあるのでしょうか?
-
[解決済み] C言語でファイルサイズを取得するには?[重複]する
-
[解決済み] 2次元配列の反復処理において、ループの順序がパフォーマンスに影響するのはなぜですか?