【LeetCode 1】算法修炼 --- Two Sum
Question:
Given an array of integers, find two numbers such that they add up to a specific target number.
The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note that your returned answers (both index1 and index2) are not zero-based.
You may assume that each input would have exactly one solution.
Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2
Question Tags:
Array , Hash Table
New Words:
add up to:总计达
indices:index的复数
zero-based:从零开始的
Solution Ideas:
思路一:
两层遍历法:对于数组中的某一个数,对它及他以后的某个数求和,若和与target相等,则可确定这两值为所找的。此方式时间复杂度为O(nlogn).
思路二:
HashMap--Value-key法:求a+b=target,也就是判断a和target-a是否都在这个数组中,
遍历判断map中是否有数组中的某个值target-a,如果没有,则把a的key以value作为key存到map中,
如果有,则所求的a,b得出来了。所求的索引值也就是a,b的索引值
此方法时间复杂度为O(n)
两种方法都可以确保index1<index2.
只考虑时间复杂度的情况下,由O(n)<O(nlogn)知,思路二的效率更高。
Solution Java code:
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map; public class TwoSum { public static void main(String[] args) {
int[] numbers={2, 7, 11, 15};
int target = 9;
int[] twoSum = twoSum(numbers,target);
System.out.println("two sum indices are " + twoSum[0] + " and " + twoSum[1]); int[] twoSum2 = twoSum2(numbers,target);
System.out.println("two sum indices are " + twoSum2[0] + " and " + twoSum2[1]);
}
//思路1
public static int[] twoSum(int[] numbers, int target) {
int i,j,sum;
int[] indices = new int[2]; outfor:for (i=0;i<numbers.length;i++){
for (j=i+1;j>i && j<numbers.length;j++){
sum = numbers[i]+numbers[j];
if (sum == target){
indices[0]=i+1;
indices[1]=j+1;
break outfor;
}
}
}
return indices;
}
//思路2
public static int[] twoSum2(int[] numbers, int target) { int[] indices = new int[2]; Map<Integer,Integer> map = new HashMap<Integer,Integer>(); for (int i=0;i<numbers.length;i++){
if (map.containsKey(target-numbers[i])){
indices[0]=map.get(target-numbers[i]);
indices[1]=i+1;
break;
}
map.put(numbers[i],i+1);
}
return indices;
}
}
思路2也可以使用hash table表达:
public static int[] twoSum3(int[] numbers, int target) {
int[] indices = new int[2];
// Map<Integer,Integer> map = new HashMap<Integer,Integer>();
Hashtable<Integer, Integer> hashtable = new Hashtable<Integer, Integer>();
for (int i=0;i<numbers.length;i++){
Integer num = hashtable.get(numbers[i]);
if (num == null) hashtable.put(numbers[i], i);
num = hashtable.get(target-numbers[i]);
if ( num != null && num < i) {
indices[0] =num + 1;
indices[1] = i+1;
return indices;
}
}
return indices;
}
【LeetCode 1】算法修炼 --- Two Sum的更多相关文章
- 求和问题总结(leetcode 2Sum, 3Sum, 4Sum, K Sum)
转自 http://tech-wonderland.net/blog/summary-of-ksum-problems.html 前言: 做过leetcode的人都知道, 里面有2sum, 3sum ...
- Leetcode 931. Minimum falling path sum 最小下降路径和(动态规划)
Leetcode 931. Minimum falling path sum 最小下降路径和(动态规划) 题目描述 已知一个正方形二维数组A,我们想找到一条最小下降路径的和 所谓下降路径是指,从一行到 ...
- LeetCode初级算法(数组)解答
这里记录了LeetCode初级算法中数组的一些题目: 加一 本来想先转成整数,加1后再转回去:耽美想到测试的例子考虑到了这个方法的笨重,所以int类型超了最大范围65536,导致程序出错. class ...
- [leetcode]364. Nested List Weight Sum II嵌套列表加权和II
Given a nested list of integers, return the sum of all integers in the list weighted by their depth. ...
- LeetCode初级算法的Python实现--排序和搜索、设计问题、数学及其他
LeetCode初级算法的Python实现--排序和搜索.设计问题.数学及其他 1.排序和搜索 class Solution(object): # 合并两个有序数组 def merge(self, n ...
- LeetCode初级算法的Python实现--链表
LeetCode初级算法的Python实现--链表 之前没有接触过Python编写的链表,所以这里记录一下思路.这里前面的代码是和leetcode中的一样,因为做题需要调用,所以下面会给出. 首先定义 ...
- LeetCode初级算法的Python实现--字符串
LeetCode初级算法的Python实现--字符串 # 反转字符串 def reverseString(s): return s[::-1] # 颠倒数字 def reverse(x): if x ...
- LeetCode初级算法的Python实现--数组
LeetCode初级算法的Python实现--数组 # -*- coding: utf-8 -*- """ @Created on 2018/6/3 17:06 @aut ...
- LeetCode:算法特辑——二分搜索
LeetCode:算法特辑——二分搜索 算法模板——基础 int L =0; int R =arr.length; while(L<R) { int M = (R-L)/2+L; if(arr[ ...
随机推荐
- usb库文件usb_desc.c分析
参考<圈圈教你玩USB> usb协议中使用的是小端结构,所以实际数据在传输时是低字节在先的. 设备描述符的实现: 已知每个设备都必须有且仅有一个设备描述符,它的结构在USB协议中有详细的定 ...
- 全球各大运营商黑莓ROM官网下载链接汇总
全球各大运营商黑莓ROM官网下载链接汇总: 先来关于8830的. 4.2.2.196的rom 8830EFS_PBr4.2.2_rel365_PL3.0.0.85_A4.2.2.196_Sprint ...
- 使用MySQL中的EXPLAIN解释命令来检查SQL
我们看到许多客户的系统因为SQL及数据库设计的很差所以导致许多性能上的问题,这些问题不好解决,但是可以采用一套简单的策略来检查生产系统,发现并纠正一些共性问题. 很显然,您应该尽最大努力设计出最好的数 ...
- Slony-I的限制
限制如下: http://slony.info/documentation/limitations.html Slony-I does not automatically replicate •Cha ...
- SCVMM之Windows Server2012 R2新功能
在Windows Server 2012 R2中可以通过使用共享的虚拟硬盘VHDX文件的方法来模拟IP SAN,来为虚拟机创建群集提供共享存储.这样为虚拟机创建群集时就不用再像以前一样通过使用软件模拟 ...
- git status对应中文名称
git status显示出来的中文文档是一串字符码,不能正常识别 git config --global core.quotepath false 这一句代码就可以帮你
- 2016 icpc-camp 之旅(一)
啦啦啦,终于前往icpccamp啦! 嗯,该死的飞机居然晚点了! 诶,晚点居然还会发赔偿金! 飞机上没什么好说的,和萌神一起看了5集龙与虎,然后就到了. 讲道理,海南航空感觉一般. 我的座位前面有个平 ...
- SGU 538. Emoticons 水题
538. Emoticons 题目连接: http://acm.sgu.ru/problem.php?contest=0&problem=538 Description A berland n ...
- VK Cup 2015 - Round 2 (unofficial online mirror, Div. 1 only) E. Correcting Mistakes 水题
E. Correcting Mistakes Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset ...
- linux C(hello world)程序调试
程序的调试(先得安装gdb工具,以root身份执行命令:sudo apt-get install gdb) 程序的调试是一个很重要的环节,windows IDE下那些强大的调试功能,Linux以什么来 ...