>[success] # 求两数之和
~~~
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
~~~
* 示例
~~~
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
~~~
>[danger] ##### 解题--PYTHON
* 思路
~~~
1.利用enumerate 知道,列表中对应的位置
2.利用字典存储
3.利用字典in 可以判断k 是否存在
~~~
~~~
class Solution:
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
dic = {}
for k,v in enumerate(nums):
if v in dic:
return [dic[v],k]
else:
dic[target-v] = k
~~~
* 最快解法
![](https://box.kancloud.cn/f7ffc503dc03513484ce142b5ba5f739_815x403.png)
>[danger] ##### 两数之和 JAVASPRICT
~~~
1.和python 思路一样用差值方法去解这个问
~~~
* 利用 javaSprict 的for i in 判断当前key是否存在
~~~
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
let targetObje = {}
for(var index=0;index<nums.length;index++){
let sub = target - nums[index]
if(nums[index] in targetObje){
return [targetObje[nums[index]],index]
}else{
targetObje[sub] = index
}
}
};
~~~
* 利用typeof 替代 for i in的判断
~~~
let twoSum = function(nums, target) {
let map = {};
let length=nums.length
for(let i =0; i<length;i++){
let d = target - nums[i]
if(typeof(map[d]) !== 'undefined'){
return [map[d], i]
}else{
map[nums[i]]=i
}
}
};
- 接触数据结构和算法
- 数据结构与算法 -- 大O复杂度表示法
- 数据结构与算法 -- 时间复杂度分析
- 最好、最坏、平均、均摊时间复杂度
- 基础数据结构和算法
- 线性表和非线性表
- 结构 -- 数组
- JS -- 数组
- 结构 -- 栈
- JS -- 栈
- JS -- 栈有效圆括号
- JS -- 汉诺塔
- 结构 -- 队列
- JS -- 队列
- JS -- 双端队列
- JS -- 循环队列
- 结构 -- 链表
- JS -- 链表
- JS -- 双向链表
- JS -- 循环链表
- JS -- 有序链表
- 结构 -- JS 字典
- 结构 -- 散列表
- 结构 -- js 散列表
- 结构 -- js分离链表
- 结构 -- js开放寻址法
- 结构 -- 递归
- 结构 -- js递归经典问题
- 结构 -- 树
- 结构 -- js 二搜索树
- 结构 -- 红黑树
- 结构 -- 堆
- 结构 -- js 堆
- 结构 -- js 堆排序
- 结构 -- 排序
- js -- 冒泡排序
- js -- 选择排序
- js -- 插入排序
- js -- 归并排序
- js -- 快速排序
- js -- 计数排序
- js -- 桶排序
- js -- 基数排序
- 结构 -- 算法
- 搜索算法
- 二分搜索
- 内插搜索
- 随机算法
- 简单
- 第一题 两数之和
- 第七题 反转整数
- 第九题 回文数
- 第十三题 罗马数字转整数
- 常见一些需求
- 把原始 list 转换成树形结构