Two Sum || LeetCode-1
来源:互联网 发布:檐沟和天沟的区别 知乎 编辑:程序博客网 时间:2024/05/04 11:34
Two Sum || LeetCode-1
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
Example:
Given numbers = [2, 7, 11, 15], target = 9,
Because numbers[0] + numbers[1] = 2 + 7 = 9,
return [0, 1].
<问题描述>
>>>>给定一个整形数组,需要从数组中找出两个整数,使得它们的和等于另外一个给定的整数
>>>>你可以假定每一个输入有且仅有一个答案,并且不能使用同一个元素两次
>>>>给出的twoSum函数应该返回找到的这两个整数的索引值,而且index1必须小于index2
>>>>输入:numbers = {2, 7, 11, 15}, target = 9 (注意:输入的数组不一定有序)
>>>>输出:index1 = 0, index2 = 1
Approach #1 (Brute Force)
Analysis
Code
Complexity
>>>>时间复杂度:O(n^2)
>>>>空间复杂度:O(1)
Approach #2 (Two-pass Hash Table)
Analysis
为了改善运行时的复杂度,我们需要一种更有效的方法来检查数组中是否存在互补。如果存在互补,我们需要查找它的索引。将数组中每个元素映射到其索引的最好方法是什么?很容易就联想到了哈希表。
我们减少了查找时间从O(n)到O(1)的交易空间的速度。哈希表是为这个目的而建立的,它支持在近恒定时间内快速查找。所谓“近”,是因为如果发生碰撞,查找可能退化为O(n)的时间。但哈希表查找应摊销O(1)的时间,只要散列函数仔细选择。
一个简单的实现使用两个迭代。第一次遍历数组先将所有元素和它的下标作为key-value对存入Hashmap中,第二次遍历数组时根据目标和与当前元素之差,在Hashmap中找相应的差值。如果存在该差值,说明存在两个数之和是目标和。此时记录下当前数组元素下标并从Hashmap中取出数组元素下标即可。Hashmap获取元素的时间复杂度是O(1),所以总的时间复杂度仍不超过O(n)。
注意:判定是否存在该差值时,要同时判断该差值的下标是不是当前遍历的元素下标,以避免重复。
Code
Complexity
>>>>时间复杂度:O(n)
>>>>空间复杂度:O(n)
Approach #3 (One-pass Hash Table)
Analysis
可以对Two-pass Hash Table进行优化,通过一次遍历即可。当我们在表中进行迭代和插入元素时,我们也回头检查表中是否存在当前元素的互补。如果它存在,我们已经找到一个解决方案,并立即返回。
Code
Complexity
>>>>时间复杂度:O(n)
>>>>空间复杂度:O(n)
Approach #4 (Sorting With Two Pointers)
Analysis
问题描述:在一个数组(无序)中快速找出两个数字,使得两个数字之和等于一个给定的值。假设数组中肯定存在至少一组满足要求。
《剑指Offer》P214(有序数组) 《编程之美》P176
容易想到在有序数组中进行查找。首先将原数组复制一遍,对新数组进行排序。排序后将双指针指向头部与尾部元素,进行迭代。如果双指针指向元素之和大于目标和,则将尾部指针向前移一位,反之则将头部指针向后移一位,直到双指针指向元素之和等于目标和,记录这两个元素的值,然后再遍历一遍旧数组,找出这两个元素的下标。Code
Complexity
>>>>时间复杂度:O(nlogn)
>>>>空间复杂度: 取决于排序算法
Code:https://github.com/JyNeo/LeetCode/blob/master/Solution001.java
- LeetCode 1 - Two Sum
- leetcode 1 Two Sum
- Leetcode【1】:Two Sum
- [leetcode 1] Two Sum
- 【leetcode-1】Two Sum
- [leetcode 1] Two Sum
- [Leetcode] 1 - Two Sum
- LeetCode (1) Two Sum
- LeetCode 1:《Two Sum》
- LeetCode | #1 Two Sum
- leetcode-1 Two Sum
- Two Sum | LeetCode(1)
- [Leetcode]1Two Sum
- leetcode 1 Two Sum
- leetcode #1 Two Sum
- leetcode 1:Two Sum
- LeetCode 1 Two Sum
- leetcode #1 two sum
- HTML5新特性详解
- Java NIO框架Netty教程(二) – 白话概念
- start with connect by prior 递归查询用法
- css3中的animation的steps(num)函数
- iOS Quartz 2D绘图知识详解
- Two Sum || LeetCode-1
- 动态规划之简单背包问题
- Java NIO框架Netty教程(三) – Object对象传递
- CryEngine5官方 window下源码编译
- GridLayout(表格布局管理器)
- 购物车 javascript
- mac 自带Apache,及php环境的配置
- SSH原理与运用(一):远程登录
- 斯坦福机器学习网易公开课笔记15