leetcode(2)c++相关问题
引入头文件
有些笔试是ACM模式,需要自己处理输入输出,还要自己添加头文件,在这里整理一下
#include <iostream>
#include <string>
#include <vector>//数组
#include <queue>//队列
#include <stack>//栈
#include <deque>//双向队列
#include <list>
#include <set>
#include <map>
#include <unordered_map>//hashmap
#include <algorithm>//min()、max()
#include <climits>//INT_MIN
#include <limits.h>//比较老的版本
#include <interator>
#include <functional>
#include <numeric>
#include <utility>
处理输入
输入一段字符串,需要按空格进行切分,并存到数组中
#include <sstream>
string line, word;
vector<string> Str;
getline(cin, line);
istringstream record(line);
while(record >> word){
Str.push_back(word);
}
声明数组的方式有:
int numpy[5];//第一种
int numpy1[5] = { 0,1,2,3,4 };//第二种(如果没有全部填写完,会用0进行填补)
float numpy2[] = { 0.23,0.56 };//第三种
int map[27]={0};//声明的同时就初始化
vector<int> map(27,0);//size为27,全部初始化为0
注意:ACM模式下必须先指定元素个数!
二维数组最后一个元素,索引为1的数:
res.back()[1]
类型转换
数字转成字符串:
string s=to_string(n);
字符串转数字:
int n=stoi(s);
自定义比较函数:
//自定义比较函数
static bool cmp(const vector<int>&a,const vector<int>&b){
if(a[0]==b[0])return a[1]<b[1];
return a[0]>b[0];
}
调用比较函数以及向数组插入元素
vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
vector<vector<int>> res;
sort(people.begin(),people.end(),cmp);//调用比较函数
int n=people.size();
for(int i=0;i<n;++i){
int position=people[i][1];//第i个人的k值
res.insert(res.begin()+position,people[i]);//向数组插入元素
}
return res;
}
排序的参数也可以使用lamda表达式
56. 合并区间
sort(intervals.begin(), intervals.end(), [](const vector<int>& a, const vector<int>& b){return a[0] < b[0];});
sort(strs.begin(),strs.end(),[](string& s1,string& s2){return s1+s2<s2+s1;});
min()、max()函数
比较3个及以上元素时有两种方式:
int min_res=min({a,b,c,e,d});
int max_res=max(max(a,b),c);
参考资料:
climits 与 符号常量