• LeetCode刷题


    题目描述

    给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。
    你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

    示例:

    
    给定 nums = [2, 7, 11, 15], target = 9    
    
    因为 nums[0] + nums[1] = 2 + 7 = 9    
    所以返回 [0, 1]
    
    

    解法一 暴力解法

    解题思路

    最容易想到的就是暴力法,使用两个遍历,查找两数之和是否为target。流程如下:

    1. 使用i来遍历数组每个元素
    2. i的每一个循环中,使用ji + 1开始遍历
    3. 判断ij对应的值的和是否为target

    代码实现

    func twoSum(nums []int, target int) []int {
        for i := 0; i < len(nums); i ++ {
            for j := i + 1; j < len(nums); j ++{
                if nums[i] + nums[j] == target{
                    return []int{i,j}
                }
            }
        }
        return []int{}
    }
    

    复杂度分析

    • 时间复杂度: O(n2)。一共有两次循环,每次循环的事件复杂度是O(n)。总的复杂度为O(n2)。
    • 空间复杂度: O(1)。

    解法二 哈希表解法

    解题思路

    该解法中会借助一个哈希表。在遍历数组时,会将当前元素添加到哈希表中。并且会检查哈希表中是否已经存在当前元素所对应的目标元素。如果存在就返回。

    代码实现

    func twoSum2(nums []int, target int) []int {
        m := make(map[int]int)
        for i := 0; i < len(nums); i ++ {
            if index, exists := m[target - nums[i]]; exists {
                return []int{i,index}
            }
            m[nums[i]] = i
        }
        return []int{}
    }
    

    复杂度分析

    • 时间复杂度:O(n)。我们只遍历了一次数组。
    • 空间复杂度:O(n)。使用了哈希表,需要额外的空间。取决于哈希表中存储的元素数量,该表最多需要存储O(n)个元素。
  • 相关阅读:
    Unity NPOI 无法读取xlsx
    spring源码之—Assert.notNull
    手工Ghost安装系统
    一键GHOST优盘版安装XP/win7系统
    oncontextmenu事件
    Maven 常用配置
    U盘装win7系统
    eval json ajax
    Maven--pom.xml 配置详解
    Maven 构建
  • 原文地址:https://www.cnblogs.com/leiwei/p/11443656.html
Copyright © 2020-2023  润新知