数据结构与算法Java篇

和为S的两个数

2018-10-14  本文已影响0人  NetCedar

问题描述
    给出一个递增数组和一个目标值s,找出和为s的两个数
问题解法
    定义两个指针start,end,分别指向头与尾。如果两指针对应的数字相加大于s,则左移end指针,否则右移start指针
代码如下

import java.util.ArrayList;

/**
 * 和为S的两个数
 */
public class FindNumbersWithSum {
    public static ArrayList<Integer> FindNumbersWithSum(int [] array, int sum) {
        ArrayList<Integer> result=new ArrayList<Integer>();

        if (array==null||array.length<=0){
            return result;
        }

        //定义两个指针,一个指向开始,一个指向末尾
        int start=0;
        int end=array.length-1;


        while (start<end){
            //数小,左指针后移
            if ((array[start]+array[end])<sum){
                start++;
            }else if ((array[start]+array[end])>sum){
                end--;  //数大 左移
            }else {
                result.add(array[start]);
                result.add(array[end]);

                System.out.println(array[start]+":"+array[end]);
                break;
            }
        }
        return result;
    }

    public static void main(String[] args) {
        int array []={1,2,4,7,11,15};
        System.out.println(FindNumbersWithSum(array,15).);
    }
}

上一篇 下一篇

猜你喜欢

热点阅读