我在接受Microsoft采访时遇到了这个问题。
给定一个随机整数数组,用C编写一个算法,该算法将删除重复的数字并返回原始数组中的唯一数字。
例如输入:{4, 8, 4, 1, 1, 2, 9} 输出:{4, 8, 1, 2, 9, ?, ?}
{4, 8, 4, 1, 1, 2, 9}
{4, 8, 1, 2, 9, ?, ?}
一个警告是预期的算法不应要求首先对数组进行排序。并且,当一个元素被删除后,以下元素也必须向前移动。无论如何,在元素向后移动的数组尾部的元素值可以忽略不计。
更新: 结果必须在原始数组中返回,并且不应使用辅助数据结构(例如,哈希表)。但是,我认为没有必要保留订单。
Update2: 对于那些想知道为什么这些不切实际的约束条件的人,这是一个面试问题,并且在思考过程中讨论了所有这些约束条件,以了解我如何提出不同的想法。
怎么样:
void rmdup(int *array, int length) { int *current , *end = array + length - 1; for ( current = array + 1; array < end; array++, current = array + 1 ) { while ( current <= end ) { if ( *current == *array ) { *current = *end--; } else { current++; } } } }
应为O(n ^ 2)或更小。