剑指Offer—42—和为S的两个数字

来源:互联网 发布:win10 办公软件 编辑:程序博客网 时间:2024/05/22 17:40

和为S的两个数字 : 输入一个递增排序的数组和一个数字 S,在数组中查找两个数,是的他们的和正好是 S,如果有多对数字的和等于 S,输出两个数的乘积最小的。

package A42和为S的两个数字;import java.util.ArrayList;import java.util.List;public class Solution {    public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {        ArrayList<Integer> list = new ArrayList<>();        if (array.length < 3){            return list;        }        int small = 0;        int big = array.length-1;        int mid = (sum+1) >> 1; // 值        int minValue = Integer.MAX_VALUE;        while (array[small] < mid){            if (array[small]+array[big] > sum){                big--;            }else if (array[small]+array[big] < sum){                small++;            }else {                if (array[small]*array[big] < minValue) {                    list.clear();                    minValue = array[small]*array[big];                    list.add(array[small]);                    list.add(array[big]);                }                small++;            }        }        return list;    }    public static void main(String[] args) {        Solution solution = new Solution();        int[] a = {1,2,4,7,11,16};        List<Integer> list = solution.FindNumbersWithSum(a,17);        for (Integer integer: list) {            System.out.println(integer);        }    }}
package A42和为S的两个数字;import java.util.ArrayList;public class Solution1 {    public ArrayList<Integer> FindNumbersWithSum(int [] array, int sum) {        int max = Integer.MAX_VALUE;        ArrayList<Integer> list = new ArrayList<>();        if (array.length<2) {            return list;        }        int small = 0;        int big = array.length-1;        while (small < big) {            if (array[small] + array[big] > sum) {                big--;            }else if (array[small] + array[big] < sum) {                small++;            }else {                if (max > array[small] * array[big] ) {                    max = array[small] * array[big];//                  list.clear();                    list.add(array[small]);                    list.add(array[big]);                }                big--;            }        }        return list;    }}
原创粉丝点击