首页 > 其他 > 详细

167. Two Sum II - Input array is sorted

时间:2018-10-16 01:24:13      阅读:171      评论:0      收藏:0      [点我收藏+]

一、题目

  1、审题

  技术分享图片

  2、分析

    给出一个升序的整形数组,当两个元素之和为 target ,输出这两个元素的下标。(只有一组符合的数)

 

二、解答

  1、思路:

    方法一、

      采用两个指针,start 从前向后移动,end 从后向前移动;当 num[start] + num[end] = target 时,输出。

    public int[] twoSum2(int[] numbers, int target) {
        
        for (int i = 0, j = numbers.length - 1; i < j; ) {
            if(numbers[i] + numbers[j] == target)
                return new int[]{1+i, 1+j};
            else if(numbers[i] + numbers[j] > target)
                j--;
            else
                i++;
        }
        
        return null;
    }

 

  方法二、

    遍历数组,以当前遍历的元素 num1 为假设的第一个符合的数,则 num2 = target - num1,采用二分查找在数组后续部分进行查找。

    public int[] twoSum3(int[] numbers, int target) {
        
        for (int i = 0; i < numbers.length; i++) {
            int start = i + 1;
            int end = numbers.length - 1;
            int tmp = target - numbers[i];
            while(start <= end) {
                int mid = start + ((end - start) >> 1);
                if(numbers[mid] == tmp) 
                    return new int[]{i + 1, mid + 1};
                else if(numbers[mid] < tmp) 
                    start = mid + 1;
                else
                    end = mid - 1;
            }
        }
        return null;
    }

 

167. Two Sum II - Input array is sorted

原文:https://www.cnblogs.com/skillking/p/9795106.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!