美文网首页
【剑指Offer 41】和为s 的两个数字

【剑指Offer 41】和为s 的两个数字

作者: 3e1094b2ef7b | 来源:发表于2017-07-22 22:17 被阅读9次

题目:输入一个递增排序的数组和一个数字s,在数组中查找两个数,得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。

代码如下:

package demo;

import java.util.ArrayList;
import java.util.List;

/**
 * 和为s的两个数字
 * 
 * @author xiangdonglee
 *
 */
public class Test41_1 {
    public static List<Integer> findNumbersWithSum(int[] data, int sum) {
        List<Integer> result = new ArrayList<>(2);
        if (data == null || data.length < 2) {
            return result;
        }
        int tail = data.length - 1;
        int head = 0;
        // 统计和,取long是为了防止溢出
        long curSum;
        while (head < tail) {
            curSum = data[head] + data[tail];
            if (curSum == sum) {
                result.add(data[head]);
                result.add(data[tail]);
                break;
            } else if (curSum < sum) {
                head++;
            } else {
                tail--;
            }
        }
        return result;
    }

    public static void main(String[] args) {
        test1();
    }

    private static void test1() {
        int[] data1 = { 1, 2, 4, 7, 11, 15 };
        System.out.println(findNumbersWithSum(data1, 15));
        int[] data2 = { 1, 2, 4, 7, 11, 16 };
        System.out.println(findNumbersWithSum(data2, 17));
        int[] data3 = { 1, 2, 4, 7, 11, 16 };
        System.out.println(findNumbersWithSum(data3, 10));
    }
}
运行结果

来源:http://blog.csdn.net/derrantcm/article/details/46784423

相关文章

网友评论

      本文标题:【剑指Offer 41】和为s 的两个数字

      本文链接:https://www.haomeiwen.com/subject/miqpkxtx.html