zoukankan      html  css  js  c++  java
  • 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)个元素。
  • 相关阅读:
    tkinter中text文本与scroll滚动条控件(五)
    tkinter中entry输入控件(四)
    tkinter中button按钮控件(三)
    tkinter中lable标签控件(二)
    tkinter简介(一)
    Pycharm激活方法使用的是(license server)
    教你如何解决WIN 10系统睡眠无法唤醒
    命令查询windows&Linux系统版本信息
    文本溢出显示省略号,CSS未加载时a标签仍可用处理方法
    Vue.js 中的动态路由
  • 原文地址:https://www.cnblogs.com/leiwei/p/11443656.html
Copyright © 2011-2022 走看看