算法#21--两数求和
来源:互联网 发布:小米手环数据修改 编辑:程序博客网 时间:2024/05/01 23:49
给定一个整数数组,返回两个数的指数,他们之和等于给定的目标值。
例如:
nums = [2, 7, 11, 15], target = 9,Because nums[0] + nums[1] = 2 + 7 = 9,return [0, 1].
如下是网上给的时间在O(n),击败了97.82%答案:
public class Solution { public int[] TwoSum(int[] nums, int target) { int len = nums.Length; int[] a = new int[2]; Dictionary<int,int> hash = new Dictionary<int,int>(); for (int i=0;i<len;i++) { int complement = target - nums[i]; if (hash.ContainsKey(complement)) { a[0]=i; a[1]=hash[complement]; return a; } else { if (!hash.ContainsKey(nums[i])) hash.Add(nums[i],i); } } return a; }}
但是它只找出了一组值就return了,如果有两组以上,求不适用。如输入:{ 1, 2, 4, 5, 6, 7, 0 , -1},目标值6.所以我优化了,给出了如下答案:
public class Solution { public static int[] TwoSum(int[] nums, int target) { int[] data = new int[nums.Length]; int index = 0; Dictionary<int, int> dic = new Dictionary<int, int>(); for (int i = 0; i < nums.Length; i++) { int temp = target - nums[i]; if (dic.ContainsKey(temp)) { data[index++] = dic[temp]; data[index++] = i; } else { if (!dic.ContainsKey(nums[i])) dic.Add(nums[i], i); } } if (index == 0) { return null; } int[] returnData = new int[index]; for (int i = 0; i < index; i++) { returnData[i] = data[i]; } return returnData; } }
0 0
- 算法#21--两数求和
- 汇编语言:两数求和
- 两数求和
- 不用加号两数求和
- 修改程序(两数求和)
- 1. Two Sum - 两数求和
- leetcode题目之两数求和
- 算法#25--两整数链表求和
- 算法:两数相加
- Google算法题:三数求和
- 一个简单的两数求和程序的小小改动
- GEEK编程练习— —两数求和
- 不使用算数运算符 完成两数求和
- 2. Add Two Numbers (两数求和)
- leetcode 第15题:两数求和的扩展
- 交换两数算法总结
- 算法练习:两数之和
- 算法Day1-两数之和
- 数据结构和算法(1)
- ruby
- solrCloud+tomcat+zookeeper配置
- OpenStack基础环境 [一]
- Android 7.1.1开发者第二预览版发布:更接近完全体
- 算法#21--两数求和
- Modbus通讯协议学习 - 认识篇
- Hibernate首个web工程
- py
- 模态非模态对话框
- 一些Drupal的How to细节处理
- Oracle 12C ORA-01792: maximum number of columns in a table or view is 1000
- MYSQL关于 NO DATABACE SELECT 报错的解决办法
- 【ARM-Linux开发】Linux链接