LeetCode 167. Two Sum II - Input array is sorted (Java)

题目:

Given an array of integers that is already sorted in ascending order, find two numbers such that they add up to a specific target number.

The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2.

Note:
Your returned answers (both index1 and index2) are not zero-based.
You may assume that each input would have exactly one solution and you may not use the same element twice.

Example:
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.

解答:

//第一次解法,采用双重for循环,时间复杂度较高
class Solution {
    public int[] twoSum(int[] numbers, int target) {
        for(int i=0;i<numbers.length;i++){
            for(int j=i+1;j<numbers.length;j++){
                if(numbers[j]==target-numbers[i])
                    return new int[]{i+1,j+1};
            }
        }
        return null;
    }
}
//第二次解法,由于数组是有序排列的,采用双指针
//一个指针指向最小值,一个指针指向最大值,最小值指针从头到尾遍历,最大值指针从尾到头遍历
class Solution {
    public int[] twoSum(int[] numbers, int target) {
        int i=0;
        int j=numbers.length-1;
        while(i<j){
            if(numbers[i]+numbers[j]<target){
                i++;
            }else if(numbers[i]+numbers[j]>target){
                j--;
            }else{
                return new int[]{i+1,j+1};
            }
        }
        return new int[]{0,0};
    }
}

你可能感兴趣的:(LeetCode)