题目描述:有n个数的数组,找出这个数组中的两个数,使得这两个数的和最接近0。
步骤:
1 数组元素从小到大排序。
2 设置两个游标,一个指向第一个数,另一个指向最后一个数。
3 把两个游标指向的数相加取绝对值,与当前得到的最小值比较,更小则记录。比较两个游标指向的数的绝对值,移动绝对值较大者对应的游标(如果是左侧游标,则向右移动;否则右侧游标向左移动)。重复当前步骤,直到和是0或者两个游标相遇。
举例:
原始序列:
-2 3 4 -7 9 5
排序后:
-7 -2 3 4 5 9
寻找过程:
res = MAX_INF;
-7 -2 3 4 5 9
| | res = 2
-7 -2 3 4 5 9
| | res = 2
-7 -2 3 4 5 9
| | res = 2
-7 -2 3 4 5 9
| | res = 2
-7 -2 3 4 5 9
| | res = 1
-7 -2 3 4 5 9
| res = 1
参考资料