剑指offer第二版-57.和为s的数字

本系列导航:剑指offer(第二版)java实现导航帖

面试题57:和为s的数字

题目要求:
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使它们的和为s。如果有多对和为s,输入任意一对即可。

解题思路:
使用两个指针分别指向数组的头、尾。如果和大于s,头部指针后移,如果和小于s,尾部指针前移。

package chapter6;

/**
 * Created with IntelliJ IDEA
 * Author: ryder
 * Date  : 2017/8/17
 * Time  : 13:25
 * Description:和为s的数字
 **/
public class P280_TwoNumbersWithSum {
    public static int[] findNumbersWithSum(int[] data,int sum){
        int[] result = new int[]{0,0};
        if(data==null || data.length<2)
            return result;
        int curSum = data[0]+data[data.length-1];
        int left = 0,right = data.length-1;
        while (curSum!=sum && left<right){
            if(curSum>sum)
                right--;
            else
                left++;
            curSum = data[left]+data[right];
        }
        if(curSum==sum){
            result[0] = data[left];
            result[1] = data[right];
        }
        return result;
    }
    public static void main(String[] args){
        int[] data = new int[]{1,2,4,7,11,15};
        int[] result = findNumbersWithSum(data,15);
        System.out.println(result[0]);
        System.out.println(result[1]);
    }
}

运行结果

4
11

推荐阅读更多精彩内容

  • 本系列导航:剑指offer(第二版)java实现导航帖 面试题57.2:和为s的连续正数序列 题目要求:输入一个整...
    ryderchan阅读 278评论 0 2
  • 剑指 offer 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成...
    faremax阅读 1,145评论 0 7
  • 剑指offer(四) 面试题四十:数组中只出现1次的数字 题目:一个整形数组里除了两个数字之外,其他的数字都出现了...
    桥寻阅读 50评论 0 0
  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 2,115评论 3 43
  • 文/闵仕清 2017年8月8日晚21时19分,位于四川阿坝州九寨沟县(北纬33.21度,...
    诗缘文字书法部落阅读 179评论 24 19