本题的链接:BM50 两数之和

最初拿到这个题目首先想到的就是两个指针,然后向后遍历,于是写出来的代码也简明易懂:

package main

/**
*
* @param numbers int整型一维数组
* @param target int整型
* @return int整型一维数组
*/
func twoSum(numbers []int, target int) []int {
// write code here
for i := 0; i < len(numbers)-1; i++ {
for j := i + 1; j < len(numbers); j++ {
if numbers[i]+numbers[j] == target {
return []int{i + 1, j + 1}
}
}
}
return []int{}
}

然而很不幸的是这个解法超时了。如果数组特别大,那么这个解法显然是不占优势的,时间复杂度明显是O(n^2),而题目要求的时间复杂度是O(nlogn)。此时,如果引入一个map,则可以将对数组的遍历降低成一趟,从而提升时间效率。

package main

/**
*
* @param numbers int整型一维数组
* @param target int整型
* @return int整型一维数组
*/
func twoSum(numbers []int, target int) []int {
// write code here
var m = make(map[int]int) for i := 0; i < len(numbers); i++ {
v, ok := m[target-numbers[i]]
if ok {
return []int{v + 1, i + 1}
} else {
m[numbers[i]] = i
}
}
return []int{}
}

这样一来,整个用例的测试时间不过62ms。时间复杂度也降低到了O(n)

【牛客刷题】BM50 两数之和的更多相关文章

  1. LeetCode刷题 - (01)两数之和

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

  2. 【LeetCode刷题】——两数之和.1

    ---恢复内容开始--- 一直想在leetcode上面刷题,但是java刚刚摸了一下门,所以迟迟没有动手,今天做了第一道题,感觉自己实在菜的不行,但是还是学到了很多东西, 就记录一下遇到的问题. 首先 ...

  3. leetcode刷题1:两数之和two_sum

    题目:(难度:Easy) 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, ...

  4. letcode刷题记录-day01-两数之和

    题目:两数之和 描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一 ...

  5. LeetCode每天一题之两数之和

    这个LeetCode刷题系列的博客权当是为自己记一下笔记吧.博客系列会从LeetCode的第一题开始刷,同时会从零开始学习[因为我就是零/(ㄒoㄒ)/~~].同时,如果有写错的地方,希望大佬们在评论区 ...

  6. C#LeetCode刷题之#15-三数之和(3Sum)

    目录 问题 示例 分析 问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3618 访问. 给定一个包含 n 个整数的 ...

  7. leetcode刷题2:两数相加add_two_numbers

    题目:两数相加 (难度:中等) 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字. 将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以 ...

  8. C#LeetCode刷题之#167-两数之和 II - 输入有序数组(Two Sum II - Input array is sorted)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3903 访问. 给定一个已按照升序排列 的有序数组,找到两个数使得 ...

  9. Leetcode第1题:两数之和

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

  10. C#LeetCode刷题之#653-两数之和 IV - 输入 BST(Two Sum IV - Input is a BST)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4098 访问. 给定一个二叉搜索树和一个目标结果,如果 BST 中 ...

随机推荐

  1. 19-Docker数据持久化

    什么是Docker数据持久化 容器在运行时会在镜像层上加上一层:可写层. 当删除容器时,可写层就会一起被删除,数据丢失. 数据持久化就是就是将数据持久化保存,删除容器之后,数据仍然存在. 方法1-挂载 ...

  2. 在Python中输出当前文件名和行号

    在Python中输出当前文件名和行号 用 inspect 库 info = inspect.currentframe() print('DEBUG!! ',info.f_code.co_filenam ...

  3. .NET 个人博客-发送邮件优化🧐

    个人博客-发送邮件优化 前言 之前的发送邮件就弄了个方法,比如回复评论会给评论的人发送邮件,留言回复也是,而且2者的代码有很多一样的地方,比较冗余.然后也是抽空优化一下,思路也是比较常用的工厂+策略模 ...

  4. 使用getevent在Android中调试输入子系统

    # Android getevent用法详解 背景 在调试安卓设备按键,想使用hexdump,但是发现没有找到,反而找到了这个更好用的工具. 以下是我的调试片段 # getevent -l /dev/ ...

  5. 分享两个内置Google广告位的Typecho主题

    前言 很多项目的开始都是因为情怀和热爱,"为爱发电"是一件很值得尊敬的事情,然而大量"为爱发电"的项目最后却不得不因"难以为继"而被迫停服. ...

  6. 无业游民写的最后一个.net有关项目框架

    理想很丰满,现实往往很残酷. 一种按照ddd的方式,根据业务来把自己需要的模块一个一个写出来,再按照模块把需要的接口一个一个的写出来,堆砌一些中间件,以及解耦的command,handler等等 ,一 ...

  7. Java报表开发工具总结

    Java报表工具,首先可以分成两大类:纯Java报表工具,和支持Java的报表工具. 支持Java的报表工具 支持Java的报表工具.其实就是非Java的报表工具,但是可以在Java程序中调用,这样的 ...

  8. BigDecimal加减乘除、比较

    // 加 a+b a.add(b); // 减 a-b a.subtract(b); // 乘 a*b a.multiply(b); // 除 a/b a.divide(b); // 绝对值 a.ab ...

  9. mac电脑好用的工具总结

    制作gif:https://gfycat.com/gifbrewery 制作gif(超级好用,制作速度快,压缩图片小):https://www.cockos.com/licecap/ 解压工具:htt ...

  10. Vulnhub-ICA01

    简介 名称:ICA: 1 发布日期:2021 年 9 月 25 日 难度:容易 描述:根据我们情报网络的信息,ICA 正在开展一个秘密项目.我们需要弄清楚这个项目是什么.获得访问信息后,请将其发送给我 ...