数组非常长,如何找到第一个只出现一次的数字,说明算法复杂度。
这道题采用STL 中的unorder_map实现。其中时间复杂度2*n,相当于过了两边数据,第一遍用于建立hashtable,第二遍查找第一次出现且hashtable中的value == 1的元素。
int find_first_apperence(int *arr)
{
unordered_map<int, int> u_map;
int i;
for(i=0; i<MAXLENGTH; ++i)
{
u_map[arr[i]]++;
}
for(i=0; i<MAXLENGTH; ++i)
{
if(u_map[arr[i]] == 1)
{
printf("%d\n", arr[i]);
}
}
}