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);

自定义比较函数:

406. 根据身高重建队列

    //自定义比较函数
    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];});

剑指 Offer 45. 把数组排成最小的数

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 与 符号常量

posted @ 2022-05-03 19:34  YTT77  阅读(77)  评论(0编辑  收藏  举报