两数之和

75 阅读1分钟

1、暴力解法

依次遍历所有可能,复杂度为O(n2)

    public int[] twoSum(int[] nums,int target){
        for(int i=0;i<nums.length;i++){
            for(int j=i+1;j<nums.length;j++){
                if(nums[i]+nums[j]==target){
                    return new int[]{i,j};
                }    
            }
        }
        return new int[0];
    }
}

2、哈希遍历

我们可以使用哈希表从而将时间复杂度降低到O(N),建立一个Map对象,遍历数组,判断与当前值相加等于target的元素是否已经在map中,如果在,返回,如果不在,把当前元素和索引放入map中。

    public int[] twoSum(int[] nums,int target){
        Map<Integer,Integer> hashmap=new HashMap<>();
        for(int i=0;i<nums.length;i++){
            if(hashmap.containsKey(target-nums[i])){
                return new int[]{i,hashmap.get(target-nums[i])};
            }else{
                hashmap.put(nums[i],i);
            }
        }
        return new int[0];
    }
}