LeetCode--Two Sum
2017-01-20 14:55
429 查看
问题描述
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.
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
UPDATE (2016/2/13):
The return format had been changed to zero-based indices. Please read the above updated description carefully.
主要采用的思想
采用hash表的思想,用一个hash函数把每一个值映射到表上其中hash函数为 h(n) = target-n+SHIFT
其中n为数组中的一个数,target为目标和,SHIFT为一个偏移量(之所以要有偏移是因为数组没有负数的下标,而target-n可能为负数)
代码
public class Solution { public int[] twoSum(int[] nums, int target) { int[] result = new int[2]; //get the max and min number of array nums[] int length = nums.length; int max=nums[0]; int min=nums[0]; for(int j=1; j<length; j++){ if(nums[j]>max) max = nums[j]; else if(nums[j]<min) min = nums[j]; } //build the hash table int htableLen; final int SHIFT; if(min < 0){ htableLen = max-min+1; SHIFT = -min; }else{ htableLen = max+1; SHIFT = 0; } int[] htable = new int[htableLen]; for(int j=0; j<htableLen; j++)//initialize the hashtable htable[j] = -1; int hashV; int num; for(int i=0; i<length; i++){ num = nums[i]; hashV = target - num + SHIFT; if(htable[num + SHIFT] != -1){//means that the peer number is here result[0]=htable[num + SHIFT]; result[1]=i; return result; }else if(hashV>=0&&hashV<htableLen){//be sure that the hash value is in the bound of hash table htable[hashV] = i; } } return result; } }
运行结果
用大量空间换取时间,速度挺感人的。。。
相关文章推荐
- Javascript SHA-1:Secure Hash Algorithm
- 浏览器运行java插件报错:Algorithm constraints check failed: MD5withRSA
- Ubuntu SSH Algorithm negotiation failed
- [转]可视化的数据结构和算法
- 蓄水池抽样(Reservoir sampling)
- 统计文件中不小于某一长度的单词的个数(泛型算法实现)
- 使用他人的MD5编码类,修改形成密码串
- Extracting Structured Data from Web Pages
- (译)Cocos2d_for_iPhone_1_Game_Development_Cookbook:1.13使用CCTexture2DMutable调换调色盘
- Java中3DES加密
- Refactoring Notes-Refactoring Methods(3)
- 图书馆管理程序~~不过貌似功能!!有空再修修
- trainging contest#2(2011成都现场赛)I BY Hyoga
- C/C++头文件包含内容概览
- 堆栈的应用(1) 平衡符号 C++实现
- 程序员编程艺术第一章、左旋转字符串
- 程序员编程艺术:第三章续、Top K算法问题的实现
- 程序员编程艺术:第四章、现场编写类似strstr/strcpy/strpbrk的函数
- 十四、第三章再续:快速选择SELECT算法的深入分析与实现