Solving Leetcode Interviews in Seconds with AI: Two Sum II - Input Array Is Sorted
Introduction
In this blog post, we will explore how to solve the LeetCode problem "167" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like Chatmagic, we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.
Problem Statement
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. Your solution must use only constant extra space. 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 * 104 -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.
Explanation
Here's the breakdown of the solution and the Python code:
High-Level Approach:
- Utilize the fact that the input array is sorted.
- Employ a two-pointer approach, one starting from the beginning and the other from the end of the array.
- Move the pointers based on whether the sum of the elements at the pointers is less than, greater than, or equal to the target.
Complexity:
- Runtime Complexity: O(n)
- Storage Complexity: O(1)
Code
def twoSum(numbers, target): """
Finds two numbers in a sorted array that add up to a target value.
Args:
numbers: A 1-indexed sorted array of integers.
target: The target sum.
Returns:
A list of two integers representing the 1-based indices of the two numbers.
"""
left = 0
right = len(numbers) - 1
while left < right:
current_sum = numbers[left] + numbers[right]
if current_sum == target:
return [left + 1, right + 1]
elif current_sum < target:
left += 1
else:
right -= 1
return [] # Should never happen as there's guaranteed to be a solution