题目说明:

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].

程序代码:

#include <gtest/gtest.h>
#include <map>
#include <vector>
#include <algorithm>
using namespace std; // 暴力遍历
vector<int> twoSum1(vector<int>& nums, int target)
{
vector<int> results;
for (int i=0; i< nums.size(); ++i)
{
for (int j=i+1; j < nums.size(); ++j)
{
if (nums[i]+nums[j] == target)
{
results.push_back(i);
results.push_back(j);
break;
}
}
} return results;
}; // 缓存映射
vector<int> twoSum2(vector<int>& nums, int target)
{
vector<int> results;
map<int, vector<int> > cache;
bool find = false; for (unsigned int i=0; i<nums.size(); ++i)
{
cache[nums[i]].push_back(i);
} for (unsigned int i=0; i<nums.size(); ++i)
{
map<int, vector<int> >::const_iterator it = cache.find(target-nums[i]);
if (it != cache.end())
{
for (unsigned int j = 0; j< it->second.size(); ++j)
{
if (i != it->second[j])
{
results.push_back(i);
results.push_back(it->second[j]);
find = true;
break;
}
} if (find)
{
break;
}
}
} return results;
}; // 排序后查找
struct Node
{
int index;
int value; Node(int i, int v)
{
index = i;
value = v;
} bool operator < (Node& ref)
{
return value < ref.value;
}
}; vector<int> twoSum(vector<int> &nums, int target)
{
vector<int> results;
vector<Node> cache; for (int i=0; i<nums.size(); ++i)
{
cache.push_back(Node(i, nums[i]));
} sort(cache.begin(), cache.end()); for (int i = 0, j = cache.size() - 1; i < j;)
{
int value = cache[i].value + cache[j].value;
if (value == target)
{
results.push_back(min(cache[i].index, cache[j].index));
results.push_back(max(cache[i].index, cache[j].index));
break;
}
else if (value > target)
{
--j;
}
else
{
++i;
}
} return results;
}; TEST(Pratices, tTwoSum)
{
// [3, 3, 1, 2] 3 => [0, 1]
// [2, 7, 11, 15] 9 => [0, 1]
// [-1, 8, 10, 12, 40, 11] 10 => [0,5] vector<int> data;
data.push_back(3);
data.push_back(3);
data.push_back(1);
data.push_back(2);
vector<int> results = twoSum(data,6); data.clear();
data.push_back(2);
data.push_back(7);
data.push_back(11);
data.push_back(15);
results = twoSum(data,9); data.clear();
data.push_back(-1);
data.push_back(8);
data.push_back(10);
data.push_back(12);
data.push_back(40);
data.push_back(11);
results = twoSum(data,10);
}

最新文章

  1. 使用 Graphviz 画拓扑图
  2. ASPose导出excel简单操作
  3. Java的堆(Heap)和栈(Stack)的区别
  4. MFC实现Gif动画制作工具
  5. nodejs weixin 笔记
  6. LCA-倍增法(在线)
  7. Python Paramiko模块
  8. 父视图 使用 UIViewAnimationWithBlocks 时,如何让子视图无动画
  9. centos使用denyhosts的问题,会将自己的IP自动加到hosts.deny的解决办法。
  10. [Angular 2] @ngrx/devtools demo
  11. SICP 锻炼 (1.45)解决摘要
  12. Struts2 属性驱动、模型驱动、异常机制
  13. 如何重置密码 oracle sys和system
  14. 变分自编码器(Variational Autoencoder, VAE)通俗教程
  15. 初学python之路-day13
  16. 还在使用SimpleDateFormat?你的项目崩没?
  17. git彻底删除某个文件的全部log历史记录
  18. 基于 CGLIB 库的动态代理机制
  19. 提一下InfoQ
  20. 开启Greenplum DataBase报错:could not bind IPv4 socket: Address already in use

热门文章

  1. 2019 CCPC-Wannafly Winter Camp Day5(Div2, onsite)
  2. javascipt中数组的常见操作
  3. spotless-maven-plugin java代码自动格式化mvn spotless:apply -fn
  4. oracle 行列转换函数之WM_CONCAT和LISTAGG的使用(一)
  5. [转]常用 GDB 命令中文速览
  6. Javascript面向对象编程(转)
  7. python+requests抓取页面图片
  8. CSS的margin属性:详解margin属性
  9. 通过IntelliJ IDEA忽略掉不需要提交到github的文件
  10. resteay上传单个文件/多个文件到本地