1、问题描述
给一个n个元素的线性表A,对于每个数Ai,找到它之前的数中,和它最接近的数。
即对于每个i,求 Ci = min{ |Ai -Aj | | 1<= j < i}
1.2算法分析
有两种思路可以解决上诉问题:
(1) 遍历整个线性表,对每个元素 A[i] ,遍历 A[0] - A[i-1] , 求出与 A[i] 绝对值最小的元素。这种方法的效率为O(n^2)。
(2)先对线性表 A 进行排序, 将结果构造成双向链表 L 。反向遍历 A,将每个元素 A[i] , 比较 A[i] - A[i-1] 和A[i+1] - A[i] ,取两者中与 A[ i ] 更接近的,即是 A[ i ] 之前的数中与 A[ i ]最接近的。然后 将A[i] 从L中删去。则双向链表中剩下的元素就是 A[i] 前面的元素。这种方法的效率可以达到O(nlogn)。