[算法练习]Two Sum
题目说明:
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);
}
[算法练习]Two Sum的更多相关文章
- LeetCode算法题-Two Sum IV - Input is a BST(Java实现)
这是悦乐书的第280次更新,第296篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第148题(顺位题号是653).给定二进制搜索树和目标数,如果BST中存在两个元素,使得 ...
- LeetCode算法题-Path Sum III(Java实现)
这是悦乐书的第227次更新 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第94题(顺位题号是437).您将获得一个二叉树,其中每个节点都包含一个整数值.找到与给定值相加的路径数 ...
- LeetCode算法题-Range Sum Query Immutable(Java实现)
这是悦乐书的第204次更新,第214篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第70题(顺位题号是303).给定整数数组nums,找到索引i和j(i≤j)之间的元素之 ...
- LeetCode算法题-Two Sum II - Input array is sorted
这是悦乐书的第179次更新,第181篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第38题(顺位题号是167).给定已按升序排序的整数数组,找到两个数字,使它们相加到特定 ...
- LeetCode算法题-Path Sum(Java实现)
这是悦乐书的第169次更新,第171篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第28题(顺位题号是112).给定二叉树和整数sum,确定树是否具有根到叶路径,使得沿路 ...
- 每日一算法之two sum
题目如下:首先准备一个数组,[1,2,8,4,9] 然后输入一个6,找出数组两项之和为6的两个下标. 啥也不想,马上上代码,这个太简单了, static int[] twoSum(int[] num ...
- 【LeetCode 1】算法修炼 --- Two Sum
Question: Given an array of integers, find two numbers such that they add up to a specific target nu ...
- 【算法】LeetCode算法题-Two Sum
程序 = 数据结构 + 算法. 算法是每一位程序员学习成长之路上无法避开的重要一环,并且越早接触越好.今后会每天做些算法题,至少每天做一道题目,同时会记录自己的解题思路和代码,通过[算法]专题来分享. ...
- 算法(10)Subarray Sum Equals K
题目:在数组中找到一个子数组,让子数组的和是k. 思路:先发发牢骚,这两天做题是卡到不行哇,前一个题折腾了三天,这个题上午又被卡住,一气之下,中午睡觉,下午去了趟公司,竟然把namespace和cgr ...
- 1192: 零起点学算法99——The sum problem(C)
一.题目 http://acm.wust.edu.cn/problem.php?id=1192&soj=0 二.分析 要求从序列1,2,3,,,N,中截取一部分使他们的和为M 输入多组数据 输 ...
随机推荐
- Navicat设定mysql定时任务
有个需求:每天将一张表的前一天的数据抽取到另一张表中,使用Mysql数据库的客户端Navicat配置 第一步,创建过程cust_report,直接在查询窗口中执行,保存后函数列表中就会出现. 第二步, ...
- 51nod 1812 树的双直径 题解【树形DP】【贪心】
老了-稍微麻烦一点的树形DP都想不到了. 题目描述 给定一棵树,边权是整数 \(c_i\) ,找出两条不相交的链(没有公共点),使得链长的乘积最大(链长定义为这条链上所有边的权值之和,如果这条链只有 ...
- C# 连接Oracle 11g 无需安装Oracle客户端
1.首先到Oracle网站上下载ODAC 下载地址1:http://download.csdn.net/detail/easyboot/9456476 下载地址2:http://www.oracle. ...
- localStorage、sessionStorage用法总结
1.作用 1.1 共同点: 都是用来存储客户端临时信息的对象. 均只能存储字符串类型的对象(虽然规范中可以存储其他原生类型的对象,但是目前为止没有浏览器对其进行实现). 1.2 ...
- MCD的正确格式
[[99NN/etWLLP/33qnzb/eMNf5mwlh9hUsT+FYsTIU15REWiQd99vwIyZqDUDIRtvsgCP0BXDlvHJlbDR+NPhyL50wS2ThIiEwD/ ...
- Java学习之路(四):面向对象
Java中的面向对象 概念:面向对象的原本的意思是“”万物皆对象“” 面向对象思想的特点: 是一种更符合我们思想习惯的思想,将复杂的事情简单化 使我们角色发生了转换,将我们从执行者变成了指挥者 面向对 ...
- 安装Cloudera Manager集群时首次运行命令部署客户端设置失败的解决办法(图文详解)
不多说,直接上干货! 问题详情 解决办法 (1) 时间同步检查下(尤其是这个) (2) 防火墙是否关闭 (3) cloudera-scm-server 和 cloudera-scm-agent 是否启 ...
- Python机器学习库sklearn的安装
Python机器学习库sklearn的安装 scikit-learn是Python的一个开源机器学习模块,它建立在NumPy,SciPy和matplotlib模块之上能够为用户提供各种机器学习算法接口 ...
- 【c++】输出文件的每个单词、行
假设文件内容为 1. hello1 hello2 hello3 hello4 2. dsfjdosi 3. skfskj ksdfls 输出每个单词 代码 #include <iostream& ...
- ExtJs6自定义scss解决actionColum中iconCls图标不能调样式的问题
问题:图标样式不对,icon(本地图片)是对的,iconCls(引用的)样式不对 查ExtJs6的API里面说,可以用style添加样式,然而并没有作用 最后在该文件树下建立scss,最好和view文 ...