[LeetCode 解题笔记] 1. Two Sum

题目描述:
Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

You can return the answer in any order.



要求我们从给定的数组中,找出两个数组元素相加等于参数result,且两个元素的下标不能相同。
如果存在返回包含两个数组元素对应下标的int型数组。



解法一、暴力破解
class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] res = new int[2];

        for(int i = 0; i < nums.length; i++){
            for(int j = (i+1); j < nums.length; j++){
                if(nums[i] + nums[j] == target){
                    res[0] = i;
                    res[1] = j;
                    return res;
                }
            }
            
        }
    
        return res;
    }
   
}
分析:
* 时间复杂度
二重嵌套循环,最差情况下,每个数据都匹配一遍,外部共循环n次,内部每次循环n-i次。时间复杂度为O(n^2)
* 空间复杂度
总共额外使用了存储结果的整形数组,空间复杂度为O(1);

解法二、哈希表
class Solution {
    public int[] twoSum(int[] nums, int target) {
        
        Map<Integer, Integer> hashtable = new HashMap<Integer, Integer>();

        for(int i = 0; i < nums.length; i++){
            if(hashtable.containsKey(hashtable.get(target - nums[i]))){
                return new int[]{hashtable.get(target - nums[i]), i};
            }

            hashtable.put(nums[i], i);
        }
        return new int[0];
    }
    
    
}
分析:
* 时间复杂度
最差情况下,每个数据都匹配一遍,for循环总共是n次。时间复杂度为O(n)
* 空间复杂度
额外使用了哈希表来存储数组元素,最差的情况是将每个元素入表,空间复杂度为O(n)

来源:力扣(LeetCode)1、Two Sum

上一篇:C. Product of Three Numbers【1300 / 简单数论】


下一篇:Two pointer