LeetCode //167. Two Sum II - Input Array Is Sorted

167. Two Sum II - Input Array Is Sorted

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 numbersindex1 and numbersindex2 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 < = n u m b e r s . l e n g t h < = 3 ∗ 1 0 4 2 <= numbers.length <= 3 * 10^4 2<=numbers.length<=3∗104
  • -1000 <= numbersi <= 1000
  • numbers is sorted in non-decreasing order.
  • -1000 <= target <= 1000
  • The tests are generated such that there is exactly one solution.

From: LeetCode

Link: 167. Two Sum II - Input Array Is Sorted


Solution:

Ideas:
We start with one pointer at the beginning of the array and another at the end. If the sum of the numbers at the two pointers is less than the target, we move the pointer at the beginning forward to increase the sum. If the sum is greater than the target, we move the pointer at the end backward to decrease the sum. We continue this process until we find two numbers that add up to the target.
Code:
c 复制代码
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* twoSum(int* numbers, int numbersSize, int target, int* returnSize){
    *returnSize = 2;
    int* result = (int*) malloc(*returnSize * sizeof(int));
    int left = 0, right = numbersSize - 1;

    while(left < right){
        int sum = numbers[left] + numbers[right];

        if(sum == target){
            result[0] = left + 1;  // +1 because the problem is 1-indexed
            result[1] = right + 1; // +1 because the problem is 1-indexed
            return result;
        }
        else if(sum < target)
            left++;
        else
            right--;
    }

    // This point should never be reached because the problem guarantees a solution
    return NULL;
}
相关推荐
浦信仿真大讲堂12 小时前
达索系统SIMULIA Abaqus 2026接触和约束的增强新功能介绍
人工智能·python·算法·仿真软件·达索软件
点云侠12 小时前
PCL 生成三棱锥点云
c++·算法·最小二乘法
兰令水13 小时前
leecodecode【面试150】【2026.6.13打卡-java版本】
java·算法·leetcode
临沂堇13 小时前
刷题日志 | Leetcode Hot 100 哈希
算法·leetcode·哈希算法
.道阻且长.13 小时前
C++ string 操作指南:接口解析
java·c语言·开发语言·c++
2601_9516457813 小时前
如何优雅地使用c语言编写爬虫
c语言·爬虫·网络请求·字符串处理·cspider
玉小格13 小时前
一次关于Python的总结
算法
伊甸313 小时前
从企业级项目学敏感词过滤:DFA算法与双层缓存实战
java·算法·缓存
bIo7lyA8v13 小时前
算法中的随机化思想及其复杂度收益评估的技术8
算法
数据法师13 小时前
视频文件重复检测工具:基于哈希与视频指纹的三级筛选机制
算法·音视频·哈希算法