力扣1.两数之和

在这里插入图片描述

解法一:暴力做法,两层for循环,遍历所有情况看相加是否等于⽬标和。

class Solution {
    
    
    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];
    }
}
//时间复杂度:两层 for 循环,O(n²)
//空间复杂度:O(1)

解法二:利用哈希表

class Solution {
    
    
    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[]{
    
    hashmap.get(target - nums[i]),i};
            }
           hashmap.put(nums[i],i); 
        }
        return new int[0]; 
    }
}
//时间复杂度:⽐解法⼀少了⼀个 for 循环,降为 O(n)
//空间复杂度:所谓的空间换时间,这⾥就能体现出来, 开辟了⼀个 hash table ,
//空间复杂度变为 O(n)

Guess you like

Origin blog.csdn.net/Sherlook_Holmes/article/details/120874877