码迷,mamicode.com
首页 > 编程语言 > 详细

LeetCode 167. 两数之和 II - 输入有序数组

时间:2020-07-20 10:20:44      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:problems   new   链接   后退   分析   else   java   ++   hash   

题目链接

167. 两数之和 II - 输入有序数组

题目分析

非常简单的一个题目,因为给定的是一个有序数组,我们可以直接使用双指针思想去寻找两个目标元素。如果num[left] + num[right]==target 就保存循环结果然后退出循环,否则就看大小移动left或者right指针。
其实这个题还可以做二分查找 ,我们外层循环使用一个i去遍历0~num.length-2这么多的元素,然后我们在内层使用二分查找,查找target-num[i]是否在数组i~num.length-1中,存在的话就保存结果然后退出循环。
这个题其实是1. 两数之和的变种,第一题的输入数据是无序的,但是如果我们预处理输入数组后,也会变成这题的做法。对于第一题,我们最好的方法就是使用一个hashmap作为缓存,只需要一个O(n)的时间复杂度就可以完成解题。

代码实现

class Solution {
    public int[] twoSum(int[] numbers, int target) {
        int[] res = new int[2];
        int left = 0;
        int right = numbers.length - 1;
        while(left < right){
            if(numbers[left] + numbers[right] == target){
                res[0] = left+1;
                res[1] = right+1;
                break;
            }else if(numbers[left] + numbers[right] > target){
                right--;
            }else if(numbers[left] + numbers[right] < target){
                left++;
            }
        }
        return res;
    }
}

LeetCode 167. 两数之和 II - 输入有序数组

标签:problems   new   链接   后退   分析   else   java   ++   hash   

原文地址:https://www.cnblogs.com/ZJPaang/p/13343224.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!