slt

注意这题结果 index 从 1 开始

Solution1 遍历 + 二分查找

  • 时间复杂度 $O(n * logn)$

  • 空间复杂度 $O(1)$

需要索引是有序的。(其实按照 two sum 的做法,再排下序也可以....)

Solution2 双指针

  • 时间复杂度 $O(n)$

    l 和 r 最多总共移动 n 次

  • 空间复杂度 $O(1)$

可以证明,对于排好序且有解的数组,双指针一定能遍历到最优解。证明方法如下:假设最 优解的两个数的位置分别是 l 和 r。我们假设在左指针在 l 左边的时候,右指针已经移动到了 r; 此时两个指针指向值的和小于给定值,因此左指针会一直右移直到到达 l。同理,如果我们假设 在右指针在 r 右边的时候,左指针已经移动到了 l;此时两个指针指向值的和大于给定值,因此 右指针会一直左移直到到达 r。所以双指针在任何时候都不可能处于 (l,r) 之间,又因为不满足条件时指针必须移动一个,所以最终一定会收敛在 l 和 r。

Last updated