配列内の最初に(最初に出会った、左から右へ)非繰り返し要素を返したいと思います。
配列内で繰り返されない最小の整数を非常に簡単に返すアルゴリズムが付属しており、配列内の最大整数値の長さを持つ余分なスペースとして配列のみを使用します。
// smallest non repeating integer
int firstNonRepeatingInteger(int* input, int n)
{
max = std::numeric_limits<int>::min() ;
for(int i = 0 ; i < n ; i++)
{
if(input[i] > max)
max = input[i];
}
int* count = new int[max];
for(int i = 0 ; i < n ; i++)
count[input[i]] += 1 ;
int j = 0;
while(count[i] != 1)
j++ ;
if(j < n)
return input[count[j]] ;
else
return -1 ;
}
ただし、整数に遭遇した時間を格納する別のn配列がある場合を除いて、最初に出会ったアルゴリズムを見つけることができません。
何か案が ?最初のアルゴリズムの他の実装はありますか?
ありがとう