170. 两数之和 III - 数据结构设计
ID: 170 TITLE: 两数之和 III - 数据结构设计 TAG: Java,Python 方法一: 这是第一题两数之和的后续问题之一,两数之和要求一个返回列表中两个数字的索引,这两个数字的和等于目标值。 我们可以从两数之和中汲取灵感,把所有的输入数字保存在一个列表中。 两数之和的一个解决方法是双指针法,指针从两个方向迭代,互相逼近。 但是,双指针法的前提条件之一是输入列表有序。 现在有几个问题: 函数 add(number) 在列表中插入新数字时,是否应该保证列表有序。 或者在调回 find(value) 时按需进行排序? 我们将在后面的算法部分讨论上述两个问题。 算法: 先给出双指针在有序列表中找到两数之和的算法。 初始化两个指针 low 和 high 分别指向列表的头尾。 从两个方向同时进行迭代,要么找到两数之和的解,要么两个指针相遇。 在每个步骤中,我们将根据不同的条件移动指针: 如果当前指针指向元素的和小于目标值,则应该增加总和来满足目标值,即将 low 指针向前移动获得更大的值。 如果当前指针指向元素的和大于目标值,则应该减少总和来满足目标值,即将 high 向 low 靠近来减少总和。 如果当前指针指向元素的和等于目标值,则直接返回结果。 如果两个指针相交,说明当前列表不存在组合成目标值的两个数。 class TwoSum ( object ) : def _