剑指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
    原文作者:ryderchan
    原文地址: https://www.jianshu.com/p/9e4be7866cb9#comments
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞