私はcのハッシュテーブルの実装がかなり新しく、インタビューの質問をいくつか調べていたところ、配列内の要素の奇妙な出現を見つけることについての質問を見つけました。私はすべてをセットアップし、次のように機能しています:
int a[256]={0};
char *str="hhlloworldd";
int i;
for(i=0;i<strlen(str);++i)
a[str[i]]++;
for(i=0;i<strlen(str);i++)
{
if(a[str[i]]%2 == 1)
{
printf("Odd occurrence of %c\n",str[i]);
}
}
私が見たハッシュテーブルソリューションの大部分(配列や文字列などの要素を数える限り)は、2つのforループを使用しています。1はそれが何であれ挿入し、1は後で結果をチェックします。これはまだO(n)の複雑さであると思います。なぜなら(間違っている場合は訂正してください)、文字列をn回通過するのはO(n)+ O(n)であり、これはO(n)に相当します。私の質問は、ハッシュテーブルに挿入するときにハッシュテーブルをチェックして、2番目のforループを削除する方法はありますか?