leetcode 刷题 —— 1 两数之和

题目描述 

/**
 * 两数之和
 * https://leetcode.cn/problems/two-sum/
 * 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。
 * 示例 1:
 *
 * 输入:nums = [2,7,11,15], target = 9
 * 输出:[0,1]
 * 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
 * 示例 2:
 *
 * 输入:nums = [3,2,4], target = 6
 * 输出:[1,2]
 * 示例 3:
 *
 * 输入:nums = [3,3], target = 6
 * 输出:[0,1]
 */

题目地址:https://leetcode.cn/problems/two-sum/

参考实现

解法1:暴力匹配,时间复杂度 O(n^2)

Java 实现

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

    public static void main(String[] args) {
        System.out.println(Arrays.toString(twoSum(new int[]{2, 5, 6}, 11)));
    }
}

Python 实现

def twoSum(nums: List[int], target: int) -> List[int]:
    '''
    暴力匹配:两数之和
    :param nums: 数组
    :param target:  和
    :return: 元素索引
    '''
    res = []  # 声明返回结果
    for i in range(0, len(nums)):
        for j in range(i + 1, len(nums)):
            # 两层遍历&判断元素和
            if (nums[i] + nums[j]) == target:
                # 将目标索引添加到列表中等待返回
                res.append(i)
                res.append(j)
                # 返回结果
                return res

解法2:hash 法,将数组put进map里,然后取出target-i和i返回即可,时间复杂度O(n)。

Java 实现

    /**
     * Hash 表:两数之和
     * @param nums
     * @param target
     * @return
     */
    public int[] twoSumWithHash(int[] nums, int target) {
        //声明待返回结果
        int[] res = new int[2];
        //声明 hash 表
        HashMap<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            //将数组元素和索引 映射到 hash 表中
            map.put(nums[i], i);
        }
        for (int i = 0; i < nums.length; i++) {
            //计算目标值与当前元素的差值
            int diff = target - nums[i];
            if(map.containsKey(diff) && map.get(diff) != i){
                res[0] = i;
                res[1] = map.get(diff);
            }
        }
        return res;
    }

Python 实现

def twoSumWithHash(nums: List[int], target: int) -> List[int]:
    '''
    Hash 表:两数之和
    :param nums: 数组
    :param target:  和
    :return: 元素索引
    '''
    # 声明返回结果 和 要用到的 Hash 表
    res = []
    mapping = {}
    #将数组映射到 map
    for i in range(0, len(nums)):
        mapping[nums[i]] = i
    for i in range(0, len(nums)):
        #计算目标与当前元素的差值
        diff = target - nums[i]
        #差值是map中key的一员&&i 不等于 当前差值对应的value,找到了
        if diff in mapping and mapping[diff] != i:
            res.append(i)#当前 元素 
            res.append(mapping[diff]) #差值对应 value
        return res
posted @ 2023-05-18 16:12  晓枫的春天  阅读(12)  评论(0编辑  收藏  举报