Two Sum II

来源:互联网 发布:贷贷兴隆网络贷款 编辑:程序博客网 时间:2024/05/20 05:09

题目描述

给定一个已经按升序排列的数组,找到两个数使他们加起来的和等于特定数。
函数应该返回这两个数的下标,index1必须小于index2。注意返回的值不是 0-based。

样例

给定数组为 [2,7,11,15] ,target = 9
返回 [1,2]


首先想到的是通过双重循环遍历数组中所有的数据对找出和为target的两个数,但是这样做的时间复杂度为O(n²)。

解题思路
因为数组是已排序的,设两个指针l和r,l指向索引为0处,r指向索引为length-1处。若nums[l]+nums[r]大于target,则r-1使两数和变小,反之则使l+1使两数和变大从而不断接近target直至相等。此时时间复杂度为O(n)

代码:

public class Main {    /*    * @param nums: an array of Integer    * @param target: target = nums[index1] + nums[index2]    * @return: [index1 + 1, index2 + 1] (index1 < index2)    */    public static int[] twoSum(int[] nums, int target) {        // write your code here        int l = 0;        int r = nums.length-1;        while ((nums[l]+nums[r])!=target){            if ((nums[l]+nums[r])<target){                l++;            }            if((nums[l]+nums[r])>target){                r--;            }        }        int[] res = {l+1,r+1};        return res;    }}
原创粉丝点击