leetcode题解 1.TwoSum
1. 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, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1]. 思路1:暴力的一种方法,将nums的所有两个数字都尝试一遍
两个for循环,时间复杂度为O(n^2),空间复杂度为O(1). 需要复习的知识:vector的使用:
定义一个vector类: vector<int> result;
定义一个返回vector的函数: vector<int> twoSum(vector<int>& nums,int target)
以及vector类中包含的数据的个数: nums.size() 记得括号不能丢
vector在尾部再加入一个数据: result.push_back(i); 代码部分:
class Solution{
public:
vector<int> twoSum(vector<int>& nums,int target)
{
vector<int> result;
for(int i=0;i<nums.size();i++)//nums.size()一定记得要带括号哦
{
for(int j=i+1;j<nums.size();j++)//important to be i+1 not i
{
if(nums[i]+nums[j]==target)
{
result.push_back(i);
result.push_back(j);
return result;
}
}
}
}
};
思路2:使用哈希表的解法
其实刚刚的思路可以转换为,我们选择了一个数字以后,下一个选择的数字就必须是target减去这个数字。
刚刚的思路其实就是通过再次的遍历来寻找这个数字。而这个寻找的过程可以简化。
简化的方式就是使用哈希表(让在数组的每个元素对应一个key然后就可以查询)。
通过使用这一次哈希就一下子让再次寻找的时间复杂度从O(n)降到了O(1)。(当然,这是在哈希表没有发生冲突的情况下)
而我们可以设计这样一个O(1)的哈希表。 需要复习的知识:
需要准备的知识主要就是怎么创建一个比较合适的哈希表,网上使用比较多的就是unordered_map
用法:
[查找元素是否存在]
若有unordered_map<int, int> mp;查找x是否在map中
方法1: 若存在 mp.find(x)!=mp.end()
方法2: 若存在 mp.count(x)!=0
[插入数据]
map.insert(Map::value_type(1,"Raoul"));
[遍历map]
unordered_map<key,T>::iterator it;
(*it).first; //the key value
(*it).second //the mapped value
for(unordered_map<key,T>::iterator iter=mp.begin();iter!=mp.end();iter++)
cout<<"key value is"<<iter->first<<" the mapped value is "<< iter->second; 代码部分:
class Solution{
public:
vector<int> twoSum(vector<int>& nums,int target)
{
vector<int> result;
unordered_map<int,int> uMap;
int res=0;
for(int i=0;i<nums.size();i++)
{
res=target-nums[i];
unordered_map<int,int>::iterator it=uMap.find(res);
if(it!=uMap.end())
{
result.push_back(it->second);
result.push_back(i);
return result;
}
uMap[nums[i]]=i;
}
}
};
leetcode题解 1.TwoSum的更多相关文章
- [LeetCode 题解]: Two Sum
前言 [LeetCode 题解]系列传送门: http://www.cnblogs.com/double-win/category/573499.html 1.题目描述 Given an a ...
- leetcode题解(持续更新)
leetcode题解 1.两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但 ...
- LeetCode题解——Two Sum
题目地址:https://oj.leetcode.com/problems/two-sum/ Two Sum Given an array of integers, find two numbers ...
- [LeetCode]题解(python):001-Two-Sum
题目来源: https://leetcode.com/problems/two-sum/ 题意分析: 这道题目是输入一个数组和target,要在一个数组中找到两个数字,其和为target,从小到大输出 ...
- 【LeetCode题解】二叉树的遍历
我准备开始一个新系列[LeetCode题解],用来记录刷LeetCode题,顺便复习一下数据结构与算法. 1. 二叉树 二叉树(binary tree)是一种极为普遍的数据结构,树的每一个节点最多只有 ...
- leetcode题解-122买卖股票的最佳时期
题目 leetcode题解-122.买卖股票的最佳时机:https://www.yanbinghu.com/2019/03/14/30893.html 题目详情 给定一个数组,它的第 i 个元素是一支 ...
- 【LeetCode题解】3_无重复字符的最长子串(Longest-Substring-Without-Repeating-Characters)
目录 描述 解法一:暴力枚举法(Time Limit Exceeded) 思路 Java 实现 Python 实现 复杂度分析 解法二:滑动窗口(双指针) 思路 Java 实现 Python 实现 复 ...
- 【LeetCode题解】225_用队列实现栈(Implement-Stack-using-Queues)
目录 描述 解法一:双队列,入快出慢 思路 入栈(push) 出栈(pop) 查看栈顶元素(peek) 是否为空(empty) Java 实现 Python 实现 解法二:双队列,入慢出快 思路 入栈 ...
- 【LeetCode题解】232_用栈实现队列(Implement-Queue-using-Stacks)
目录 描述 解法一:在一个栈中维持所有元素的出队顺序 思路 入队(push) 出队(pop) 查看队首(peek) 是否为空(empty) Java 实现 Python 实现 解法二:一个栈入,一个栈 ...
随机推荐
- [转载]要提高SQL查询效率where语句条件的先后次序应如何写
出处:https://www.cnblogs.com/exe19/p/5786806.html 我们要做到不但会写SQL,还要做到写出性能优良的SQL语句. (1)选择最有效率的表名顺序(只在基于规则 ...
- Docker bridge-utils 工具简单部署
bridge-utils 网桥查看工具 # 1.安装 查看桥接工具 yum install -y bridge-utils # 2.查看桥接 命令brctl show bridge name brid ...
- Linux 查看网卡流量、网络端口
查看网络流量 # 查看网卡流量 命令:sar -n DEV 1 10 注:每1秒 显示 1次 显示 10次 平均时间: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcm ...
- asp.net 后台 get,post请求
//Post请求 public static string Post(string url,string obj=null) { string param = (obj);//参数 byte[] bs ...
- [linux,springboot] - 记一次java项目部署
之前部署的java项目,打包war包后放入tomcat下,并配置conf下的server.xml,设置war包路径,设置是否自动解包与否等操作. 然后重启tomcat,稍等片刻,(web)java项目 ...
- GPU并行的基础知识
- ios外包公司——技术分享:手机应用开发步骤
1. 确定你的创意 您的创意是否有人做过,如果有类似的app,那就要多多考虑,争取超越并且有一些独特的优化设计在其中 2. 定位应用 通过苹果的人机界面指南(Human Interface Guide ...
- AngularJS服务及注入--Provider
Provider简介 在AngularJS中,app中的大多数对象通过injector服务初始化和连接在一起. Injector创建两种类型的对象,service对象和特别对象. Service对象由 ...
- hibernate 的API使用
1.Query对象:不需要写sql语句,但需要hql语句,和sql很类似 (1)sql和hql区别:sql操作表和表字段,hql操作实体和实体属性 (2)使用: 2.Criteria对象:不需要写语句 ...
- 雷林鹏分享:jQuery EasyUI 数据网格 - 创建页脚摘要
jQuery EasyUI 数据网格 - 创建页脚摘要 在本教程中,我们将向您展示如何在数据网格(datagrid)页脚显示摘要信息行. 为了显示页脚行,您应该设置 showFooter 属性为 tr ...