和为S的两个数字

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

import java.util.ArrayList;

public class Solution {
    
    public ArrayList<Integer> FindNumbersWithSum(int[] array, int sum) {
        
        ArrayList<Integer> a = new ArrayList<Integer>();
        int first = 0;
        int second = 0;
        int min = Integer.MAX_VALUE;
        for(int i = 0; i < array.length; i++) {
            
            if(array[i] > sum)
                break;
            if(array[i] > sum - array[i])
                break;
            int temp  = sum - array[i];
            if(binarySearch(array, temp)) {
                
                if(array[i] * temp < min){
                    
                    first = array[i];
                    second = temp;
                    min = first * second;
                }
            }
        }
        if(first == 0 || second == 0) 
            return a;
        a.add(first);
        a.add(second);
        return a;
    }
    private boolean binarySearch(int[] a, int key) {
        
        if(a == null || a.length == 0)
            return false;
        return search(a, 0, a.length - 1, key);
    }
    private boolean search(int[] a, int left, int right, int key) {
        
        if(left > right)
            return false;
        int mid = (left + right) / 2;
        if(a[mid] == key)
            return true;
        if(a[mid] < key)
            return search(a, mid + 1, right, key);
        else
            return search(a, left, mid - 1, key);
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 和为S的两个数字 题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多...
    Jacinth阅读 234评论 0 0
  • 题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输...
    juexin阅读 446评论 0 0
  • 题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输...
    quiterr阅读 147评论 0 0
  • 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数...
    BeijingIamback阅读 303评论 0 0
  • 转眼我今年都21,再有一年大学也要毕业了,我很喜欢给未来的自己写信,如今也给过去的自己写一写,万一,万一哪天时光机...
    可乐的数据分析之路阅读 535评论 2 1