Subsequence After One Replacement — two pointers
On a sorted array the pair that sums to target is found by walking inward. Built for LeetCode 3983. Subsequence After One Replacement.
If the current sum is too small, the only way to grow it is to advance lo. If it is too big, retreat hi. Each step discards an index forever, so the walk is linear.
Algorithm
- Set
lo = 0,hi = n−1. - While
lo < hi, comparenums[lo] + nums[hi]totarget. - Equal → return the indices. Too small →
lo++. Too big →hi--.
- Time
- O(n)
- Space
- O(1)
Assumes the array is sorted.
class Solution: def subsequenceAfterOneReplacement(self, nums: list[int], target: int) -> list[int]: lo, hi = 0, len(nums) - 1 while lo < hi: s = nums[lo] + nums[hi] if s == target: return [lo, hi] if s < target: lo += 1 else: hi -= 1 return []