算法刷题小技巧(入门小白级,持续更新ing)

1.Visual Studio头文件

        相当于万能头文件<bits/stdc++.h>

#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#include<string.h>
#include<vector>
#include<string>
#include<queue>
#include<stack>
#include<algorithm>
#include <map>

2. 初始化

//哈希表
#include <unordered_map>

map<string, int> dict;

std::unordered_map<std::string, int> myMap;

vector< int> vec;

vector<vector< int> >vec2;

//动态开辟一维数组

int *a=new int[n];

//动态开辟二维数组

int **arr = new int*[width];

for(int i = 0; i < width; ++i)

        arr[i] = new int[height];

//一维vector

vector<int>array(len);	

//二维vector

std::vector<std::vector<double>> dp(row, std::vector<double>(m, 0.0));

3.特殊函数用法

swap

swap(a,b);
//交换两个整数,浮点数,结构体...

find

if (find(b.begin(), b.end(), word) == b.end()) {
            b.push_back(word);
}

sort

bool cmp(node a, node b){

    return a.x > b.x;

}
//sort(首元素地址,尾元素地址的下一个地址(必填),比较函数(非必填));

 sort(a.begin(),a.end(),cmp);

4.哈希表用法

myMap["apple"] = 10;

// 遍历
for (const auto& pair : myMap) {
    std::cout << pair.first << ": " << pair.second << std::endl;
}
 
// 检查某个键是否存在
if (myMap.count("banana") > 0) 
 
// 删除某个键值对
myMap.erase("apple");
 
// 清空哈希表
myMap.clear();

5.vector用法

//创建
vector<int> vec;

//尾插
vec.push_back(a);、

//删除最后一个元素
vec .pop_back()  

//迭代器访问元素
for(it=vec.begin();it!=vec.end();it++)

//在第i个元素后面插入a
vec.insert(vec.begin()+i,a);

//删除元素
//删除第3个元素
vec.erase(vec.begin()+2);
//删除区间[i,j-1]
vec.erase(vec.begin()+i,vec.end()+j);

//大小
vec.size();

//清空
vec.clear()

//元素翻转
#include<algorithm>
reverse(vec.begin(),vec.end());

//排序
#include<algorithm>
sort(vec.begin(),vec.end());

6.string类函数

/拼接  
c= a + b 
	
//字符串输入输出
cin >> s; //回车作为结束输入的标志
    
//读取一行字符
//a[n] 则最多读取 n-1个字符 
cin.getline(a,8);
	
//长度
s.length()

//拷贝 
#include<cstring>
strcpy(a,s.c_str());

//字符数组转字符串
string s(a);

//字符串的比较 ,相等为0,不等为1 (或者循环遍历)
strcmp(str1,str2)
	
//查找字符串的子串
cout<<s.find("tr")<<endl;// 1,找到

//替换字符串 replace(起始位置,个数,"替换内容")
s.replace(3,1,"XI");

//删除子串
s.erase(position,nummer); //起始位置,删除个数 

//添加子串(位置,增加的字符串)
s.insert(5,"aaa");
    
//反转函数 
#include<algorithm> 
reverse(s.begin(),s.end());
	
//sort 排序
#include<algorithm> 
sort(s.begin(),s.end());

//字符串转数字
a=stoi("123")

//数字转字符串
c=to_string(123)

//字符串截取
string sub1 = str.substr(0, 5); // 从0位置开始,长度为5的子串
string sub2 = str.substr(7);    // 从7位置开始,到字符串末尾的子串

//字符串转为字符
ch = str[0];
ch = str.at(3); // 使用at()函数获取字符串中的第四个字符

//字符串流类
string str = "123 456 789";
stringstream ss(str);  // 定义一个字符串流

int num;
while (ss >> num) {  // 逐个读取每个整数
    cout << num << endl;
}

//读取一行输入
string input1, input2;
getline(cin, input1);
getline(cin, input2);


//求出字符串中字符的个数(不允许重复)
int countUniqueChars(string str) {
    set<char> charSet;

    // 将每个字符添加到set中
    for (char c : str) {
        charSet.insert(c);
    }

    return charSet.size();
}

//求出字符串中没有重复的字符的个数
int countUniqueChars(string str) {
    unordered_map<char, int> charCount;

    // 统计每个字符出现的次数
    for (char c : str) {
        charCount[c]++;
    }

    int uniqueCount = 0;

    // 查找没有重复的字符个数
    for (char c : str) {
        if (charCount[c] == 1) {
            uniqueCount++;
        }
    }

    return uniqueCount;
}

//求字符串中字符a-z(不允许重复)的个数
int countUniqueChars(string str) {
    set<char> charSet;

    // 遍历字符串中的每个字符,将其加入set容器中
    for (char c : str) {
        if (c >= 'a' && c <= 'z') {  // 只统计a-z之间的字符
            charSet.insert(c);
        }
    }

    return charSet.size();
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值