この記事では、LeetCodeトピック645を実行するときに発生する問題、主に可変長配列の初期化について要約します。
645.間違ったコレクション
質問タイプ
配列
まとめ
- 各トラバーサルは同時に複数の処理を実行できます。たとえば、重複を検索する場合、この質問では損失も検出されます。つまり、if-elseif-elseタイプではなく、forループのif-if-ifタイプです。
- アルゴリズムのセットでは、問題を直接解決できない場合があります。この問題で1が欠落しているか、nが欠落しているために、アルゴリズムが欠落した値を見つけるなど、特別に対処する必要がある特別な状況があります。
- 変数を使用して配列の容量を定義する場合、同時に初期化することはできません!!!各数値の出現回数をカウントする配列を定義する場合は、numsSizeパラメータに従って配列の容量を決定する必要がありますが、それ
int counts[numsSize + 1] = { 0 };
を使用すると、システムはエラーを報告します。error: variable-sized object may not be initialized
その可変サイズの配列は初期化されていない可能性があります!実際int counts[numsSize + 1];
には、宣言に問題はありません、問題は同時初期化です!この質問はC言語の規制に属しています。初期化する場合は、宣言の後に行う必要があります。実際、動的メモリ割り当てを使用する方が良いです:
int *counts = (int *) malloc( (numsSize + 1) * sizeof(int) );
memset( counts, 0, (numsSize + 1)*sizeof(int) );