题目描述:给定包含N个数的无序数组S(可能包含负数,0,正数)。求三个数A,B,C,使其和的绝对值最小。
例如:S={-9,0,1,3,6},A=-9,B=3,C=6,MIN=0
算法解析:
解法一:枚举3个数,O(N*N*N)
解法二:对S排序后枚举其中2个数,二分查找另一个数。O(N*N*LOGN) 解法三:对S排序后枚举其中1个数X,使用双向指针i,j从数组两端更新(注意剔除X)。根据S[I]+S[J]+X的正负号来更新I或J。若为负则I++,否则J--。一旦和为0即退出。同时根据每次得到的和来更新best。最后best即为所求。利用三个变量X,Y,Z记录,可得到任一最优解。复杂度O(N*lOGN+N*N)=O(N*N) 期待更好解法 :)
例如S={-9,0,1,3,6,10}
X=-9
0 1
|