题解 | #和为S的两个数字#

和为S的两个数字

http://www.nowcoder.com/practice/390da4f7a00f44bea7c2f3d19491311b

离大谱解法,单独处理多对的情况

import java.util.*;
public class Solution {
    public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
        int n = array.length;
        ArrayList<Integer> ans = new ArrayList<Integer>();
        Map<Integer,Integer> map = new HashMap<>();
        for(int i = 0;i < n;i++){
            if(map.containsKey(sum-array[i])){
                ans.add(sum-array[i]);
                ans.add(array[i]);
            }
            map.put(array[i],i);
        }
        int min = Integer.MAX_VALUE,index = 0,index1 = 1;
        if(ans.size() > 2){
            for(int i = 0;i < ans.size()-1;i+=2){
                if(ans.get(i)*ans.get(i+1) < min){
                    min = ans.get(i)*ans.get(i+1);
                    index = i;
                    index1 = i+1;
                }
            }
            ArrayList<Integer> res = new ArrayList<Integer>();
            res.add(ans.get(index));
            res.add(ans.get(index1));
            return res;
        }
        return ans;
    }
}
全部评论

相关推荐

铁锈不腻玩家:下面那个袁先生删了,问他怎么回事,头像都换不明白
点赞 评论 收藏
分享
10-24 11:10
山西大学 Java
若梦难了:哥们,面试挂是很正常的。我大中厂终面挂,加起来快10次了,继续努力吧。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务