Python基础:环境配置
conda环境配置conda环境是python中相当于工具包的一个存在,因为python的使用中需要调用大量的库。不同的库之间难免有版本冲突和不同的Python版本依赖。 为了解决这个问题,Python开发者提出了conda环境的概念,可以把库和python版本安装到虚拟环境中,运行时在不同的Python虚拟环境里面运行即可。 步骤如下: 安装Anaconda 找到Anaconda Prompt 打开Anaconda Prompt,创建自己的新环境,配置python版本 现在以python3.11为例,math是这个环境的名字 1conda create -n math python=3.11 后续激活操作后续可以在Anaconda Prompt中或者其他编译器的Python控制台输入下列指令去激活环境12345# To activate this environment, use $ conda activate math# To deactivate an active environment, use $ conda deactivate 镜像源配置123conda...
高级数据结构:题目+代码
并查集模板题:此题非常经典,是不带权的并查集模板 P1551 亲戚注意:合并是把根节点合并,不是中途合并,不然会发生断路123456789101112131415161718192021222324252627282930313233343536#include<bits/stdc++.h>using namespace std;int n,m,p;int totalSet[5005];int find_set(int a){ if(totalSet[a]==a){ return a; } totalSet[a]=find_set(totalSet[a]); return totalSet[a];}void add_set(int a,int b){//把a分支并入b a=find_set(a),b=find_set(b); totalSet[a]=totalSet[b];}int main(){ ...
图论基础
图的储存储存图有很多种方式,在此介绍难度循序渐进的三种:邻接数组,邻接表,链式前向星。第一种虽然简单,但访问的时间和空间花销过大,第三种最为优越,但使用较难,因此第二种最为常见。让我们分别看看它们是什么 在介绍之前,我们先解释一下此处说的“图”是什么。 在算法领域,图一般指多个节点之间相互连接的关系。这就是一个简单的图: 从上图可以看出,节点之间的联系可以是有向的,也可以是无向的,把图分为有向图和无向图。节点之间的“边”可以是有长度的,也可以是无长度的,这里的长度一般被称为“权值”,把图分为有权图和无权图。注意,权值并不一定是边的长度,也可以是和边有关的值,需要具体问题具体分析。 现在,我们来介绍一下如何储存这种点和边的关系。 邻接数组这是最为简单的方法,使用一个二维数组去储存点和边的关系。我们只考虑最复杂的有权有向图,至于其他类型,可以从有权有向图简化得到。如无权有向图就是把权值改为1即可。 现在用邻接数组储存...
matrix
析构函数释放规律局部变量储存在栈区域所以释放的时候采用“后创建 先释放”的模式并且在函数内在创建一个栈,例如花括号,函数递归,会先释放内部栈元素,再释放外部栈元素1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950#include <iostream>using namespace std;class MyClass {private: int id; static int count; // 静态成员变量public: MyClass(int id){ this->id=id; count++; cout << "Constructor: Object " << this->id << " created. Total objects: " << count...
洛谷力扣
2680. 最大或值问题:观察到,要选找位数最高的数左移k位,才可能使或值最大 尝试通过两次循环而不是排序找出所有最高位元素。 时间复杂度从$O(nlogn)$到$O(n)$ 随后,对取出的最高位元素各自尝试左移,找出最大答案。 时间复杂度约$O(nlogn)$ 整体时间复杂度约为$O(nlogn)$ 成功TLE 代码:123456789101112131415161718192021222324252627282930313233class Solution {public: long long maximumOr(vector<int>& nums, int k) { auto maxIt=max_element(nums.begin(),nums.end()); int maxIndex=maxIt-nums.begin(); int len=nums.size(),big=0,temp=nums[maxIndex]; while(temp){ ...
DFS/BFS以及剪枝技巧
DFS简介DFS含义 ⭐DFS,即Depth-first-search,是深度优先搜索的简称。 它的主要思路是一直沿当前分支搜索,当搜索到尽头之后返回,再逐步向其他地方扩散。 我们可以通过一个树形结构说明DFS的遍历顺序 1234567 A / | \ B C D / \ | E F G / \H I 遍历顺序:(假设一直沿左分支走)A→B→E→H→I→F→C→D→G 当然,完全可以沿右分支先走,甚至遍历起点并不非得是树的顶端。事实上,DFS的实现依赖于递归,而遍历的顺序也和递归的位置息息相关。甚至通过调整递归的顺序,我们可以用三种方法遍历一个二叉树,不过这并不是本次重点,不过多叙述接下来让我们通过一个简单的例题来看看DFS的实现。 全球变暖P8662 [蓝桥杯 2018 省 AB] 全球变暖 题目描述你有一张某海域 $N \times N$ 像素的照片,. 表示海洋、 # 表示陆地,如下所示: 1234567........##.....##........##...####....###........ 其中...
动态规划
普通dp普通dp是指一些很浅显的、可以由无后效性和最优子结构得出答案的题目 非常基础的题目:P1216 数字三角形1234567891011121314151617181920#include<bits/stdc++.h>using namespace std;int n;int dp[1001][1001];int main(){ cin>>n; int maxNum=0; for(int i=1;i<=n;i++){ for(int j=1;j<=i;j++){ int now; cin>>now; int j1=(j-1)>=1?j-1:1,j2=(j<=i-1)?j:i-1; dp[i][j]=now+max(dp[i-1][j1],dp[i-1][j2]); if(maxNum<dp[i][j]) ...
C++:sort使用技巧以及快排实现
sort()简介sort() 是 C++ 标准库中的一个排序函数,定义在 $algorithm$ 头文件中。它的排序时间复杂度是$O(nlgn)$,远胜于普通的冒泡排序和选择排序。现在介绍其函数重载、使用方法以及快速排序的具体实现。 sort()使用方法默认排序(不传入函数参数)1234567891011#include<iostream>#include<algorithm>#include<vector>using namespace std;int main(){ vector<int> example={11,42,3,24}; sort(example.begin(),example.end());//传入迭代器或指针,指向开头和结尾,默认是升序排序 int example1[]={22,33,11}; ...
C++:String类
💡string类初始化常用的初始化有赋值初始化与直接初始化在C++种,还可以用列表初始化,但在string类初始化中并不常见1234567891011121314151617181920212223242526#include <iostream>#include <string>using namespace std;int main(){ string z;//初始化空字符串 string a ="Hello, world";//复制c风格字符串直到遇到'\0' string b("Hello!");//调用构造函数复制c风格字符串 string b1=string("Hello!");//与上一种写法等价 string c(5,'z'); string d("HelloWorld", 5); // "Hello",取C风格字符串的前n个 string...