'''
Level: Easy

Given a 1-indexed array of integers numbers that is already sorted in non-decreasing order,

find two numbers such that they add up to a specific target number.

Let these two numbers be

numbers[index1] and numbers[index2] where 1 <= index1 < index2 <= numbers.length.

Return the indices of the two numbers,

index1 and index2, added by one as an integer array [index1, index2] of length 2.

The tests are generated such that there is exactly one solution.

You may not use the same element twice.



Example 1:

Input: numbers = [2,7,11,15], target = 9
Output: [1,2]
Explanation: The sum of 2 and 7 is 9. Therefore, index1 = 1, index2 = 2. We return [1, 2].

Example 2:

Input: numbers = [2,3,4], target = 6
Output: [1,3]
Explanation: The sum of 2 and 4 is 6. Therefore index1 = 1, index2 = 3. We return [1, 3].

Example 3:

Input: numbers = [-1,0], target = -1
Output: [1,2]
Explanation: The sum of -1 and 0 is -1. Therefore index1 = 1, index2 = 2. We return [1, 2].


Constraints:

2 <= numbers.length <= 3 * 10^4
-1000 <= numbers[i] <= 1000
numbers is sorted in non-decreasing order.
-1000 <= target <= 1000
The tests are generated such that there is exactly one solution.

'''

class Solution(object):
    def twoSum(self, numbers, target):
        """
        :type numbers: List[int]
        :type target: int
        :rtype: List[int]
        """
        from collections import deque
        queue = deque(numbers)
        while queue:
            if queue[0] + queue[-1] > target:
                queue.pop()
            elif queue[0] + queue[-1] < target:
                queue.popleft()
            else:
                # Handle duplicate number case: [0,0,3,4]
                if numbers.index(queue[0]) == numbers.index(queue[-1]):
                    ans = [numbers.index(queue[0])+1, numbers.index(queue[-1])+2]
                else:
                    ans = [numbers.index(queue[0])+1, numbers.index(queue[-1])+1]
                break


        print(ans)
        return ans






numbers = [2,7,11,15]
target = 9
assert [1,2] == Solution().twoSum(numbers, target)

numbers = [-1,0]
target = -1
assert [1,2] == Solution().twoSum(numbers, target)

numbers = [2,3,4]
target = 6
assert [1,3] == Solution().twoSum(numbers, target)

numbers = [0,0,3,4]
target = 0
assert [1,2] == Solution().twoSum(numbers, target)