Leetcode #1 Two Sum
Leetcode #1 Two Sum
题目大意
给定一个整数数组(Integers Array),让你找出两个数 使得他们的和正好等于给定的值(Target),返回这两个数的下标。保证只有唯一解题目分析
这个题目题意清晰,要注意两点:- 返回下标,而不是数字本身,且下标是升序的。
- 只有唯一解(这给我们带来了很大便利)
解法
我们很直接就能想到暴力解法(Brutal Force):
利用二维循环,去扫描每一个数,找到的即为答案,注意这种办法在解不唯一且要 输出所以解的时候也适用。很显然,这个暴力算法的- 时间复杂度(Time Complexity)是 O(n2)O(n^2)
- 空间复杂度是(Space Complexity) 是O(1)O(1),因为算法运行并没有利用额外的空间
伪代码如下:
for(i=0;i<ArrayLen;i++)for(j=0;j<ArrayLen;j++){if(Array[i] + Array[j] == Target){//return i,j}}
利用Hashmap 将我们有什么数存下来,当遇到一个数的时候,直接去存的地方看看它配对的那个数(Target - CurrentNumber)以前出现过没有,如果出现过,则找到了答案,否则将这个数也加入hashmap,继续往下找。不过Hashmap实现的时候不同语言就有不同的办法了。
Python
Python 的内建类型set 和dict是利用hash 实现的 所以查找的复杂度为O(1)O(1).
而list 的查找并不是基于has key,所以复杂度近似为O(n)O(n),并不能提高算法效率。C++
利用 map即可C
以上两种语言(还有java等等)都是利用自带或者库里的方法直接实现hash,可是对于C语言来说,hash 就需要自己实现了。- 首先,我们需要确定hash key对于一个数字value如何在O(1)O(1)时间内确定它在table里的位置。这里需要一个map functon即
F(value)=indexF(value) = index - 最简单的映射函数就是用value 直接作为下标,为了节省些许空间和处理负数,可以对坐标作关于最小值的线性变换
- 通常映射函数是f(value)=valuemodnf(value) = value \quad mod \quad n n通常选一个质数来减少冲突。当冲突发生了,可以采用open(把它往后面空的地方丢)、close(下拉一个链表存所有下标一样但值不一样的数) 或者用双hash表。在此不再赘述
- 首先,我们需要确定hash key对于一个数字value如何在O(1)O(1)时间内确定它在table里的位置。这里需要一个map functon即
4.代码
def twoSum(self, nums, target):NumHash = {}for index, cur_num in enumerate(nums):need_num = target - cur_numif need_num in NumHash:return [NumHash[need_num], index]else:NumHash[need_num] = index
未来有机会补上C和C++ 代码
5.总结思考
首先如果解不唯一,需要输出所有解或者最小的解(下标之和),还有没有O(n)O(n)的办法,该怎么写呢。
可以尝试用C 实现hash,来理解几种冲突的解决办法
Leetcode #1 Two Sum相关推荐
- leetcode 304. Range Sum Query 2D - Immutable |304. 二维区域和检索 - 矩阵不可变(二维前缀和问题)
题目 https://leetcode.com/problems/range-sum-query-2d-immutable/ 题解 本题是 medium 难度,二维前缀和问题.相似题目有: Easy: ...
- 【动态规划】LeetCode 377. Combination Sum IV
LeetCode 377. Combination Sum IV Solution1: 我的未能AC的答案 题目描述的和前几道题差不多,但实际上不能用DFS来做(会超时),要用动态规划,还是记录一下吧 ...
- 【DFS】LeetCode 39. Combination Sum
LeetCode 39. Combination Sum Solution1: DFS,这个套路要熟记啊! class Solution { public:vector<vector<in ...
- LeetCode 167.Two Sum II 解题报告
LeetCode 167.Two Sum II 解题报告 题目描述 Given an array of integers that is already sorted in ascending ord ...
- leetcode 1005 Maximize Sum Of Array After K Negations
leetcode 1005 Maximize Sum Of Array After K Negations 1.题目描述 2.解题思路 3.Python代码 1.题目描述 给定一个整数数组 A,我们只 ...
- [勇者闯LeetCode] 1. Two Sum
[勇者闯LeetCode] 1. Two Sum Description Given an array of integers, return indices of the two numbers s ...
- [勇者闯LeetCode] 112. Path Sum
[勇者闯LeetCode] 112. Path Sum Description Given a binary tree and a sum, determine if the tree has a r ...
- 数据结构线段树介绍与笔试算法题-LeetCode 307. Range Sum Query - Mutable--Java解法
此文首发于我的个人博客:zhang0peter的个人博客 LeetCode题解文章分类:LeetCode题解文章集合 LeetCode 所有题目总结:LeetCode 所有题目总结 线段树(Segme ...
- LeetCode 653. Two Sum IV - Input is a BST--Python解法
题目地址:Two Sum IV - Input is a BST - LeetCode Given a Binary Search Tree and a target number, return t ...
- LeetCode 167. Two Sum II - Input array is sorted--Python解法
题目地址:Two Sum II - Input array is sorted - LeetCode Given an array of integers that is already sorted ...
最新文章
- 备份一个万能网卡驱动
- SAP WM 自动创建TO单的JOB运行报错 - Enter the storage unit type - 对策
- Pycharm 基本快捷键
- 主成分分析 PCA算法
- VB 判断IP能否ping通
- Vue实现按钮和文本框的切换
- android 获取系统所有安装的应用程序
- Java 集合系列18之 Iterator和Enumeration比较
- 取消锚(a/)点击后页面跳转的几种方法
- C语言练习:第二大整数
- 如何实现博客的评论和回复功能
- 2022-2027年中国暖气片行业市场全景评估及发展战略规划报告
- 计算机界一些有意思的命名,程序员们也都很有情调嘛!
- 如何才能成为一名优秀的设计师?
- Unity3D深入浅出 - Shader基础开发
- 计算机网络-网络应用(上)
- 有道云笔记的markdown编辑器如何通过mathtype来写公式
- 高级计算机网络管理员试题及答案,2016年计算机软考网络管理员测试题及答案...
- SAP-MM知识精解-批次管理(06-01)-批次确定的概览及主要逻辑
- python 免费空间_免费云空间/VPS AppFog申请及Python Web应用开发与上传实战