笔记
WWF_666
这个作者很懒,什么都没留下…
展开
-
2021/12
【代码】2021/12。原创 2024-01-14 12:39:46 · 392 阅读 · 0 评论 -
并查集、最大公约数/最小公倍数模板
并~查-集int pre[1000];//前驱数组 //查找根节点 int find(int x){ int r=x;//定义根节点 //查找根节点 while(pre[r]!=r){ r=pre[r]; } //路径压缩 int i=x,tmp; while(i!=r){ tmp=pre[i]; pre[i]=r; i=tmp; } return r;//返回根节点 }//不压缩简易方法 int find(int x){ return f[x]==x?原创 2022-04-08 01:12:25 · 170 阅读 · 0 评论 -
二分查找
441. 排列硬币class Solution {public: int arrangeCoins(int n) { if(n==1) return 1; int l=1,r=n; while(l<=r){ int mid=l+(r-l)/2; if((long long)2*n>=(long long)(mid+1)*mid){ l=mid+1; } else{ r=mid-1; } } return l原创 2021-10-10 15:34:24 · 94 阅读 · 0 评论 -
2021-10-04 ++i 与 i++
当i是对象,如迭代器时,++i效率高于i++,前置++返回的是对象的引用,后置++需要创建局部临时对象,返回值也是对象,都会引发构造函数调用。原创 2021-10-04 16:54:07 · 99 阅读 · 0 评论 -
2021-09-24 贪心算法
贪心分发饼干class Solution {public: int findContentChildren(vector<int>& g, vector<int>& s) { sort(g.begin(),g.end()); sort(s.begin(),s.end()); int index=s.size()-1; int res=0; for(int i=g.size()-1;i>=0;i--){//循环到小孩胃口结束原创 2021-09-24 10:35:40 · 108 阅读 · 0 评论 -
2021-09-17 回溯算法//???
回溯法,一般可以解决如下几种问题:组合问题:N个数里面按一定规则找出k个数的集合排列问题:N个数按一定规则全排列,有几种排列方式切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合条件的子集棋盘问题:N皇后,解数独等等组合无序,排列有序void backtracking(参数) { if (终止条件) { 存放结果; return; } for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)原创 2021-09-17 21:46:21 · 161 阅读 · 0 评论 -
2021-09-13 -14二叉搜索树
二叉搜索树中的搜索特点有序递归法class Solution {public: TreeNode* searchBST(TreeNode* root, int val) { if(root==NULL||root->val==val){//终止条件 return root; } if(root->val > val){ return searchBST(root->left,val);//小于就搜索左子树 } if(root->v原创 2021-09-13 23:53:14 · 69 阅读 · 0 评论 -
2021-09-06-08-10
对称二叉树class Solution {public: bool cmp(TreeNode* l,TreeNode* r){ if(l==NULL&&r==NULL){//排除空子结点 return 1; } else if(l!=NULL&&r!=NULL&&l->val==r->val){//唯一能递归的条件 bool outside=cmp(l->left,r->right); bool in原创 2021-09-06 23:45:38 · 74 阅读 · 0 评论 -
2021-08-27
对称二叉树class Solution {public: bool cmp(TreeNode* l,TreeNode* r){ if(l==NULL&&r==NULL){//排除空子结点 return 1; } else if(l!=NULL&&r!=NULL&&l->val==r->val){//唯一能递归的条件 bool outside=cmp(l->left,r->right); bool in原创 2021-08-27 22:06:05 · 93 阅读 · 0 评论 -
2021-08-25 二叉树的遍历
struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};1.二叉树的前序遍历递归做法:class Solution {public: void preorder_traversal(TreeNode* cur,vector<int>& vec){ if(cur==NUL原创 2021-08-25 19:07:48 · 91 阅读 · 0 评论 -
2021-08-23-24 栈和队列
1.用栈实现队列class MyQueue {public: stack<int> istack;//输入栈 stack<int> ostack;//输出栈 MyQueue() {} void push(int x) { istack.push(x); } int pop() { if(ostack.empty()){ while(!istack.empty()){//直到输入栈为空 ostack.push(istack原创 2021-08-24 15:35:13 · 103 阅读 · 0 评论 -
2021-08-22 字符串
位运算异或实现交换s[l] ^= s[r]; //构造 a ^ b 的结果,并放在 a 中s[r] ^= s[l]; //将 a ^ b 这一结果再 ^ b ,存入b中,此时 b = a, a = a ^ bs[l] ^= s[r]; //a ^ b 的结果再 ^ a ,存入 a 中,此时 b = a, a = b 完成交换1.反转字符串void reverseString(vector<char>& s) { for(int i=0,j=s.size()-1;i<j原创 2021-08-22 23:02:54 · 164 阅读 · 0 评论 -
2021-08-21-22 哈希表
1.有效的字母异位词class Solution {public: bool isAnagram(string s, string t) { int record[26]={0}; for(int i=0;i<s.size();i++){//遍历s record[s[i]-'a']++; } for(int i=0;i<t.size();i++){//遍历t record[原创 2021-08-21 22:10:37 · 280 阅读 · 0 评论 -
2021-08-20 链表
类型:单链表中的节点只能指向节点的下一个节点。双链表:每一个节点有两个指针域,一个指向下一个节点,一个指向上一个节点。双链表既可以向前查询也可以向后查询。循环链表:链表首尾相连,可以用来解决约瑟夫环问题。存储:数组是在内存中是连续分布的,但是链表在内存中可不是连续分布的。链表是通过指针域的指针链接在内存中各个节点。定义:单链表:struct ListNode{ int val;//结点上存储的元素数据 ListNode *next; ListNode(int x):val(x),ne原创 2021-08-20 19:03:51 · 181 阅读 · 0 评论 -
2021-08-19 数组笔记
注意vector 和 array的区别,vector的底层实现是array,严格来讲vector是容器,不是数组。数组的元素是不能删的,只能覆盖????C++中二维数组在地址空间上是连续的java二维数组在内存中不是3*4 的连续地址空间,而是四条连续的地址空间组成!1.二分查找左闭右闭:class Solution {public: int search(vector<int>& nums, int target) { int l=0; int r=原创 2021-08-19 16:50:41 · 98 阅读 · 0 评论 -
2021-08-18 01背包应用
01背包应用1.分割等和子集dp[j]表示 背包总容量是j,最大可以凑成j的子集总和为dp[j]。递推公式:dp[j] = max(dp[j], dp[j - nums[i]] + nums[i])如果如果题目给的价值都是正整数那么非0下标都初始化为0就可以了,如果题目给的价值有负数,那么非0下标就要初始化为负无穷。故dp[0]=0.如果dp[j] == j 说明,集合中的子集总和正好可以凑成总和j,bool canPartition(vector<int>& nums){原创 2021-08-18 21:46:33 · 104 阅读 · 0 评论 -
2021-08-17 01背包
01背包有N件物品和一个最多能被重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次二维dp数组dp[i] [j]的含义:从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少。递归公式:dp[i] [j] = max(dp[i - 1] [j], dp[i - 1] [j - weight[i]] + value[i])重量为j的背包能放入的最大价值和则有两种情况:1、当前背包容量j<weight[i] , 当前原创 2021-08-17 19:03:56 · 77 阅读 · 0 评论 -
2021-08-16 动态规划笔记
动态规划确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组1.斐波那契数int fib(int N) { if (N < 2) return N; vector<int> dp(N + 1); dp[0] = 0; dp[1] = 1; for (int i = 2; i <= N; i++) { dp[i]原创 2021-08-16 18:04:37 · 112 阅读 · 0 评论 -
2021-08-13排序笔记
1、稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 仍然在 b 的前面,则为稳定排序。2、非稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 可能不在 b 的前面,则为非稳定排序。3、原地排序:原地排序就是指在排序过程中不申请多余的存储空间,只利用原来存储待排数据的存储空间进行比较和交换的数据排序。4、非原地排序:需要利用额外的数组来辅助排序。c++函数输入参数为数组时怎么求长度https://blog.csdn.net/qq_40692109/art原创 2021-08-12 22:52:01 · 134 阅读 · 0 评论 -
2021-08-16 kmp算法笔记
kmp算法参考 https://mp.weixin.qq.com/s/MoRBHbS4hQXn7LcPdmHmIg字符串传参:https://www.cnblogs.com/shierlou-123/p/13554991.html字符串匹配暴力算法:void bruteforce(char *a,char *b){ for(int i=0;i<=strlen(a)-strlen(b);i++){ int flag=1; for(int j=0;b[j]!='\0';j++){原创 2021-08-16 00:24:30 · 161 阅读 · 0 评论