描述

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, and you may not use the same element twice.

示例

Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

算法分析

难度:低

分析:要求给定的数组,查找其中2个元素,满足这2个元素的相加等于给定目标target的值。

思路:一般的思路,我们遍历数组元素,假设当前遍历的数组元素x,再次遍历x之后的数组元素,假设当前再次遍历的数组元素y,判断x+y是否满足target,如果满足,则返回x,y下标,否则继续遍历,直至循环结束。考虑这种算法的时间复杂度是O (n²),不是最优的解法。

跟前面几章类似,我们可以考虑用哈希表来存储数据,这里用C#提供的Hashtable来存储下标-对应值(key-value)键值对;

接着遍历数组元素,如果目标值-当前元素值存在当前的Hashtable中,则表明找到了满足条件的2个元素,返回对应的下标;

如果Hashtable没有满足的目标值-当前元素值的元素,将当前元素添加到Hashtable,进入下一轮遍历,直到满足上一条的条件。

代码示例(C#)

public int[] TwoSum(int[] nums, int target)
{
var map = new Hashtable(); ;
for (int i = 0; i < nums.Length; i++)
{
int complement = target - nums[i];
//匹配成功,返回结果
if (map.ContainsKey(complement))
{
return new int[] { (int)map[complement], i };
}
map.Add(nums[i], i);
}
return null;
}

复杂度

  • 时间复杂度O (n).
  • 空间复杂度O (1).

附录

最新文章

  1. SpringMVC处理客户端请求的过程
  2. 区分debug和release生成文件的名称
  3. 无法删除对象 &#39;产品&#39;,因为该对象正由一个 FOREIGN KEY 约束引用。
  4. Thymeleaf+Spring整合
  5. 一种table超出高度自动出滚动条的解决方案
  6. [转] HashMap和HashSet的区别
  7. Spring ioc 原理
  8. Web开发之RSET API
  9. .NET Web开发之.NET MVC框架
  10. 流动python - 自然装饰
  11. 使用 CodeIgniter 框架快速开发 PHP 应用(五)
  12. DevExpress 控件使用之GridControl基本属性设置
  13. python 之栈的实现
  14. sqlserver资源
  15. PHP——isset和empty
  16. Confluence 6 布局高级自定义
  17. JAVA记录-消息队列介绍
  18. 移动网络简介与RRC
  19. css 滚动条样式
  20. robot framework-requests库安装过程问题解决

热门文章

  1. 使用CMD命令编译和运行Java程序
  2. windows下 python3.5+tensorflow 安装
  3. python文件基本操作(读,写,追加)
  4. 100个命令Linux常用命令大全
  5. elasticsearch基本操作之--java基本操作 api
  6. three.js 实现全景以及优化(2)
  7. Mysql5.7动态修改innodb_buffer_pool_size
  8. Hashtable源码解析(JDK1.8)
  9. django初探-创建简单的博客系统
  10. spring boot jsp页面