题目描述(简单难度)

167. Two Sum II - Input array is sorted - 图1

给一个有序数组和一个目标值,找出两个数使其和为目标值,返回这两个数的位置(数组下标加 1)。

解法一

第 1 题 做过无序数组找两个数,里边的解法当然也可以用到这道题,利用了 HashMap,可以过去看一下。

第 15 题 找出三个数,使其和为目标值的题目中的解法中,其实我们将问题转换到了现在这道题,也可以过去看一下。具体的话,其实我们只需要首尾两个指针进行遍历即可。

  1. public int[] twoSum(int[] numbers, int target) {
  2. int i = 0;
  3. int j = numbers.length - 1;
  4. while (i < j) {
  5. if (numbers[i] + numbers[j] == target) {
  6. return new int[] { i + 1, j + 1 };
  7. } else if (numbers[i] + numbers[j] < target) {
  8. i++;
  9. } else {
  10. j--;
  11. }
  12. }
  13. //因为题目告诉我们一定有解,所以这里随便返回了
  14. return new int[] { -1, -1 };
  15. }

这道题没有新东西,双指针的技巧经常用到。这可能是篇幅最少的一个题解了,哈哈。

windliang wechat

添加好友一起进步~

如果觉得有帮助的话,可以点击 这里 给一个 star 哦 ^^

如果想系统的学习数据结构和算法,强烈推荐一个我之前学过的课程,可以点击 这里 查看详情