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

和为S的两个数字

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

import java.util.ArrayList;

import java.util.HashMap;

public class Solution {

public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {

    ArrayList<Integer> arr = new ArrayList<>();
    int len = array.length;
    // 方法一 暴力解法 时间复杂度O(n*2) 空间复杂度O(1)
    for(int i=0;i<len-1&&array[i]<sum;++i){
        for(int j=i+1;j<len&&array[j]<sum;++j){
            if(array[i]+array[j]==sum){
                arr.add(array[i]);
                arr.add(array[j]);
                return arr;
            }
        }
    }
    
    // 方法二 利用数组升序的特点
    int l=0, r=len-1;
    while(r>0 && array[r]>=sum) r--;
    while(l<r){
        if(array[l]+array[r]<sum)
            l++;
        else if(array[l]+array[r]>sum)
            r--;
        else{
            arr.add(array[l]);
            arr.add(array[r]);
            return arr;
        }
    }
    
    //方法三 哈希
    HashMap<Integer,Integer> map = new HashMap<>();
    for(int i=0;i<len;++i){//提前把小于sum的元素存入哈希中
        if(array[i]>sum)
            break;
        map.put(array[i],1);
    }
    for(int i=0;i<len;++i){
        if(map.containsKey(sum-array[i])){//sum-a在哈希中存在,说明找到了
            arr.add(array[i]);
            arr.add(sum-array[i]);
            return arr;
        }
    }
    return arr;
}

}

阿勇算法解集 文章被收录于专栏

对一些基础的,经典的题目的算法题解,每道题的题解尽量做到一题多解,举一反三。其中每一个题解中,若是参考了其他牛人的想法,我会备注出来。

全部评论
方法三:如果是 【1 2 4】 4 就有错误
点赞 回复 分享
发布于 2022-04-13 20:56
方法三 哈希 有badcase,你提交上去试试
点赞 回复 分享
发布于 2022-04-05 01:31

相关推荐

07-03 16:02
门头沟学院 Java
今天面试,非常紧张,面试官问我springboot有哪些核心模块都答不上来了,真的对自己无语了!
程序员小白条:28届我勒个去,很多人面试都没机会
查看1道真题和解析
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务