lintcode:两个数的和
题目
给一个整数数组,找到两个数使得他们的和等于一个给定的数target。
你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是1到n,不是以0开头。
样例
numbers=[2, 7, 11, 15], target=9
return [1, 2]
注意
你可以假设只有一组答案。
解题
更新
更改为HashMap存储
num 不在map中,put( target - num,i)
否则,result[0] = map.get(num)+1 result[1] = i + 1
- public class Solution {
- /*
- * @param numbers : An array of Integer
- * @param target : target = numbers[index1] + numbers[index2]
- * @return : [index1 + 1, index2 + 1] (index1 < index2)
- */
- public int[] twoSum(int[] numbers, int target) {
- // write your code here
- int[] result = new int[2];
- if(numbers ==null || numbers.length <=1){
- return result;
- }
- HashMap<Integer,int[]> map = new HashMap<Integer,int[]>();
- for(int i=0;i<numbers.length;i++){
- int num = numbers[i];
- int[] value = map.get(num);
- if(value == null){
- value = new int[]{i};
- map.put(target - num,value);
- }else{
- result[0] = value[0] + 1;
- result[1] = i + 1;
- }
- }
- return result;
- }
- }
题目之前做LeetCode时候写过这个,利用这里利用ArrayList,当 target- numbers[i] 不在 list中,把numbers[i] 加入到list中,当存在的时候,取出下标,和当前数的下标就是答案了。
- public class Solution {
- /*
- * @param numbers : An array of Integer
- * @param target : target = numbers[index1] + numbers[index2]
- * @return : [index1 + 1, index2 + 1] (index1 < index2)
- */
- public int[] twoSum(int[] numbers, int target) {
- // write your code here
- int result[] = new int[2];
- ArrayList<Integer> list = new ArrayList<Integer>();
- for(int i = 0;i<numbers.length ; i++){
- int tmp = target - numbers[i];
- if(!list.contains(tmp)){
- list.add(numbers[i]);
- }else{
- result[0] = list.indexOf(tmp) + 1;
- result[1] = i + 1;
- break;
- }
- }
- return result;
- }
- }
Java Code
总耗时: 1042 ms
- class Solution:
- """
- @param numbers : An array of Integer
- @param target : target = numbers[index1] + numbers[index2]
- @return : [index1 + 1, index2 + 1] (index1 < index2)
- """
- def twoSum(self, numbers, target):
- # write your code here
- L = {}
- result = [0]*2
- for i in range(len(numbers)):
- tmp = target - numbers[i]
- if tmp not in L:
- L[ numbers[i] ] = i + 1
- else:
- result[0] = L[tmp]
- result[1] = i + 1
- break
- return result
Python Code
总耗时: 313 ms
lintcode:两个数的和的更多相关文章
- Java数据结构与算法之---求两个数的最大公约数(欧几里得算法)
一个简单的小算法来获取两个数的最大公约数, public class Test { public static void main(String[] args) { long result = gcd ...
- JavaScript获取两个数之间的任意随机数
通过JavaScript的Math.random()方法可以获取0到1之间的任意随机数,那如何获取任意给定的两个数之间的随机数呢?如获取2和5之间的随机数,5和10之间的随机数等. 由于Math.ra ...
- shell实现两个数的相加
刚开始的时候写,一直写不对:看似简单的功能,但是一定要小心:函数的定义: funciton functionName {.....}在functionName和{之间一定有空格啊! 我就是没加空格,就 ...
- [猜数字]把两个数和告诉A,积告诉B,求这两个数是什么
1-20的两个数把和告诉A,积告诉B,A说不知道是多少,B也说不知道,这时A说我知道了,B接着说我也知道了,问这两个数是多少? 分析: 设和为S,积为M. 首先,A:我不知道. 说明:S可以分解成多个 ...
- java课后作业 弹出窗口求两个数的加减乘除
//计算2个数的加减乘除 谷伟华 2015/10/6package jisuan; import javax.swing.JOptionPane; public class Jiasuan { pub ...
- 创建一个LinkedList,然后在其中插入多个值,确保每个值都插入到List中间(偶数中间两个数之一,奇数在正中间)
这是Thinking in java 中的一道题,下面是我的解决方案: package test; import java.util.LinkedList; import java.util.List ...
- 求两个数的最大公约数(Java)
获得两个随机数(100以内),并放入数组中 public int[] getTwoRandom(){ int[] t = new int[2]; Random rand = new Random(); ...
- 和为S的两个数VS和为S的连续正数序列
其实这个题目如果没有限制时间复杂度的话,那么就很简单了,一遍一遍地扫描吧.时间复杂度肯定就是 O(n2)啰.但是这题目肯定不会这么简单,否则就是小学生的水平了嘛. 其实我刚到这题的时候想到的是用二叉查 ...
- C实现辗转相除法求两个数的最大公约数
什么是辗转相除法? 辗转相除法(又名欧几里德算法),它主要用于求两个正整数的最大公约数.是已知的最古老的算法. 用辗转相除法求132和72的最大公约数的步骤: 132 / 72 = 1 ... 60 ...
随机推荐
- Android 与 Webservice 的快速保存
前面写了一篇android对sqllite的快速保存博客,今天我们来看看android与webservice的交互,相信很多有经验的人自然就想到了soap.但是如果在小型项目中,具有大材小用之嫌.实际 ...
- php win主机下实现ISAPI_Rewrite伪静态
有的win主机iss不支持 .htaccess 文件, 我在这里指的不是本地 在本地的话用apmserv服务器可以用.htaccess 文件,用apmserv服务器环境配置伪静态可以看 php 伪静态 ...
- Sorl之java操作
参考教程: http://www.cnblogs.com/xia520pi/p/3625232.html http://www.cnblogs.com/hujunzheng/p/5647896.htm ...
- IOC学习
控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心. 控制反转一般分为两种类型,依赖注入 ...
- selenium+python find_element_by_css_selector方法使用
1.通过类class获取 比如如下代码 <h1 class="important"> This heading is very important. </h1&g ...
- 【Web学习日记】——在IIS上发布一个WebService
没有开发过程,只是发布过程 一.前提 开发使用的是VS2013 从来没有做过Web的发布,在网上找例子,看到的总是与自己的情况不相符,而且也有人提出了VS2013发布网站的问题,但解决方案却很少,好不 ...
- vxworks启动
- Underscore 源码
Underscore 源码 作者:韩子迟 What? 不知不觉间,「Underscore 源码解读系列」进入了真正的尾声,也请允许我最后一次 po 下项目的原始地址 https://github.co ...
- c#之委托和事件的区别
1.什么是委托,这里就不做介绍了,如果想了解可以查看博客:http://www.cnblogs.com/xiaoxiaogogo/p/3571494.html 下面开始对事件进行介绍 1.定义事件以及 ...
- Flex显示麦克风当前音量
Flex动态显示麦克风当前音量 效果: 代码: <?xml version="1.0" encoding="utf-8"?> <s:Appli ...