// This is possibly an optimal solution
 
class Solution {
public:
    std::vector<int> twoSum(std::vector<int>& numbers, int target) {
        if (numbers.size() == 2) return std::vector<int>{1, 2};
 
        int left = 0, right = numbers.size() - 1;
        std::vector<int> result;
        result.reserve(2);
 
        while (left < right) {
            int sum = numbers[left] + numbers[right];
 
            if (sum > target) right--;
            else if (sum < target) left++;
            else {
                result.push_back(++left);
                result.push_back(++right);
                break;
            }
        }
 
        return result;
    }
};