码迷,mamicode.com
首页 > 其他好文 > 详细

167. Two Sum II - Input array is sorted

时间:2018-10-16 02:05:36      阅读:305      评论:0      收藏:0      [点我收藏+]

标签:ber   技术   bubuko   图片   put   []   col   end   NPU   

一、题目

  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

标签:ber   技术   bubuko   图片   put   []   col   end   NPU   

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

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