【LeetCode】 Two Sum
来源:互联网 发布:淘宝蓝海选品软件 编辑:程序博客网 时间:2024/05/16 08:29
问题描述:
给定一个数组和一个目标值,在这个数组中找到两个数,使得这两个数的和为目标值。返回这两个数的下标。
解决方法:
1、暴力破解法
……2、哈希表Hash Table
参考资料:
http://blog.csdn.net/u012903926/article/details/47293521
HashMap map = new HashMap();/** * 通过指定key获取对应的value * 如果key值不存在,则返回null; * 如果key存在但是value为null,则返回null; * 如果key存在并且value不为null,则返回value的值; * 恰当的使用时机:已知key值存在(并且value不为null)的情况下,想要通过key找到value的时候 */ map.get(); /** * 恰当的使用时机:当要判断map中是否包含了键key的时候 * 如果包含key但是对应的value值为null,则返回ture * 如果包含key并且对应的value值存在,则返回value * 如果不包含key,则返回false */ map.containsKey(); /** * 以上同理 */ map.containsValue();
时间效率:
在暴力破解方法中的时间复杂度之所以是O(n2),是因为该方法中有两层循环。第一层循环为O(n),第二层也为O(n)。如果使用Hash Table,以空间换时间,并且Hash函数选取合适,那么第二层的查找可以达到O(1),但是空间复杂度就会提高到O(n)。
在java中,HashMap就是最好的选择。
多考虑一点:
面对这样一个输入[ 5 , 3 , 5 ],目标sum是 10 的情况。
因为map的key值不允许重复,所以map中的元素只有两个{5,2}和{3,1}。因为题目中“假设题目的解只有一种情况”。当sum[i]指向第一个5的时候,target=sum-sum[i]=5。通过map查找key=5的元素的下标是得到的map.get( target )为2。此时得到一个解:下标为0和2的元素满足目标和为10。此时立即返回。
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
- 泛型依赖注入
- ListView优化
- LightOJ - 1079 Just another Robbery 概率 + dp
- 一段有趣的并发concurrencyhashMap代码
- linux开机关机命令与登录注销命令
- 【LeetCode】 Two Sum
- c++11的新特性
- Swift学习记录 -- 11.函数的基本使用
- linux的vi比编译器开发java和c的步骤
- android音量控制、再按一次退出的功能
- Linux下的c基础编程——魔方阵
- 编译原理
- Java中com.jcraft.jsch.ChannelSftp讲解
- 2016国庆清北学堂游记