LeetCode--Two Sum
来源:互联网 发布:电脑透视软件 编辑:程序博客网 时间:2024/05/29 02:39
问题描述
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; }}
运行结果
用大量空间换取时间,速度挺感人的。。。
0 0
- 【Leetcode】Two Sum (Sum)
- LeetCode: Two Sum
- LeetCode: Two Sum
- [Leetcode] Two Sum
- LeetCode : Two Sum
- Leetcode: Two Sum
- leetcode 46: Two Sum
- [LeetCode] Two Sum
- LeetCode 1 - Two Sum
- Leetcode : Two Sum
- 【leetcode】Two Sum
- [LeetCode]Two Sum
- leetcode Two Sum
- [Leetcode] Two Sum
- [leetcode] Two Sum
- LeetCode - Two Sum
- leetcode之Two Sum
- LeetCode | Two Sum
- 2.系统开发基础-软件设计(4)
- 解决手机浏览器无法显示本地html文件
- rplidar 三角测距激光雷达原理
- CSS3 之 渐变
- 求连通图的关节点(割点)--C语言
- LeetCode--Two Sum
- AngularJS ui.bootstrap.pagination 分页
- C语言—链表的创建
- 算法训练 接水问题
- 在高德地图使用: amap is not defined
- itoa、atoi 整型转字符串、字符串转整型的函数
- fdisk
- Android Studio自动生成单例代码
- Java基本概念-事物