1. Two Sum
Given an array of integers, return indices ofthe two numbers such that they add up to a specific target.
You may assume that each input would have exactly onesolution, and you may not use the same element twice.
Example:
Givennums = [2, 7, 11, 15], target = 9,
Becausenums[0] + nums[1] = 2 + 7 = 9,
return[0, 1].
//从一个数组中找出两个数字,使得的这两个数字的和等于target
class Solution {
public:
vector<int>twoSum(vector<int>& nums, int target) {
//定义了函数twosum类型,所以return应该是一个vector数组!!!
vector<int>res;
//声明一个res储存索要输出的内容
int len=nums.size();
//vector类型获取长度用size()
map<int,int>m;
//定义一个hash表,用来建立数值与下标的索引,其中key为数值,velue为下标
target=nums[j]+nums[i]
nums[j]=target-nums[i]
即在向map中插入元素的时候,边插入边判断前面的主键是否有target-nums[i],如果有,将这两个的下标插入到m中,最后输出!
//动态的判断,时间复杂度小于O(n)
for(int i=0;i<len;i++){
if(m.count(target-nums[i])){
res.push_back(i);
res.push_back(m[target-nums[i]]);
return res;
}
m[nums[i]]=i;
}
return res;
}
};
//知识补充:c++中的STL复习
1. vector动态数组 #include<vector>
声明:vector<数据类型>name;
在数组最后添加元素:name.push_back(元素值)
删除数组最后的元素:name.pop_back()
得到编号位置的数据 at()
获取数组大小size()
清空数组clear()
max_szie() 获取数组最大可以是多大
empty()判断数组是否为空
2. map类型 #include<map>
定义:map<key,velue>name;
插入数据:
(1) my_Map["a"] = 1;
(2) my_Map.insert(map<string, int>::value_type("b",2));
(3) my_Map.insert(pair<string,int>("c",3));
(4) my_Map.insert(make_pair<string,int>("d",4));
查找数据:MY_MAP::iteratormy_Itr;//定义迭代器
my_Itr.find("b"); //查找key的值为b的数据,并将my_ltr指向该位置!
int j = my_Itr->second;
获取这个元素的值
my_Itr->second= j;//修改元素值
删除元素my_Map.erase(迭代器或者key);
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase()删除一个元素
find() 查找一个元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数
3. set类型 集合,元素各不相同!mutiset支持相同元素
4. list列表 和vector类似,unique()删除重复元素
5. stack栈 后进先出的容器
声明过程同上
插入元素push()
删除元素pop()//出栈只是删除这个元素,而不访问这个元素
访问栈顶元素top()
判断是否为空empty()
返回栈的大小size()
6. queue队列 后进先出
入队push()
出队pop()
访问对尾元素back()
访问队头元素front()
判断队列是否为空empty()
7. 迭代器 iterator
每种容器都有自己的迭代器,声明方法:
vector<int>::iteratoriter;
使用迭代器对动态数组进行遍历:
for(iter=v.begin();iter!=v.end();iter++){
cout<<*iter;
}//iter只能够读取元素而不能够修改元素!
Distance()函数能够计算迭代器与开头的位置