力扣算法题:1. 两数之和

题目链接:1. 两数之和 - 力扣(LeetCode)力扣算法题:1. 两数之和_第1张图片

 有人相爱,有人夜里开车看海,有人leetcode第一题都做不出来。

简单题不一定简单,力扣第一题虽然是简单题,却也劝退了无数求学者。

解法一:暴力枚举法

面对这一题,最简单的直观的解决方法应该就是暴力枚举法了,采用双重for循环直接求解。

JavaScript代码如下:

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    const len=nums.length
    for(let i=0;i

go语言代码:

func twoSum(nums []int, target int) []int {
    length:=len(nums)
    for i,item := range nums {
        temp:=target-item
        for j:=i+1;j

但是这种求解方式时间复杂度太高O(n^{2}),如果数据量过大很容易超时。

解法二:哈希表

暴力枚举法主要缺陷在于无法快速查找需要的值,这时候如果能快速找到需要的值,速度就会得到巨大的提升。

这个时候就不得不提到哈希表,众所周知哈希表的查找速度快,这个时候如果使用哈希表,性能必定是是质的飞跃。

将数组元素作为key,索引作为value插入到哈希表中,每次插入前在哈希表中查找是否有对应的值,如果有,取出对应的value并return,反之将数据插入哈希表继续循环。

JavaScript代码如下:

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    let myMap=new Map()
    let len=nums.length
    for(let i=0;i

go语言代码如下:

func twoSum(nums []int, target int) []int {
    myMap:=make(map[int]int)
    for i,item := range nums {
        if temp,ok:=myMap[target-item];ok {
            return []int{temp,i}
        }else{
            myMap[item]=i
        }
    }
    return nil
}

时间复杂度:O(n) 

你可能感兴趣的:(leetcode,算法,数据结构)