ACWING
ACWING刷题笔记
少写代码少看论文多多睡觉
这个作者很懒,什么都没留下…
展开
-
AcWing 803. 区间合并
AcWing 803. 区间合并原创 2022-12-31 16:36:44 · 118 阅读 · 0 评论 -
AcWing 802. 区间和
AcWing 802. 区间和 离散化的思路原创 2022-12-31 15:07:05 · 129 阅读 · 0 评论 -
Acwing 801. 二进制中1的个数
Acwing 801. 二进制中1的个数原创 2022-12-30 13:07:40 · 148 阅读 · 0 评论 -
AcWing 双指针算法 799. 最长连续不重复子序列
AcWing 双指针算法 799. 最长连续不重复子序列原创 2022-12-30 12:10:33 · 151 阅读 · 0 评论 -
Acwing 798.差分矩阵
Acwing 798.差分矩阵原创 2022-12-27 13:08:56 · 167 阅读 · 0 评论 -
Acwing 797. 差分
Acwing 797. 差分原创 2022-12-27 12:01:11 · 109 阅读 · 0 评论 -
AcWing 796. 子矩阵的和
AcWing 796. 子矩阵的和原创 2022-12-27 10:21:35 · 92 阅读 · 0 评论 -
AcWing 794. 高精度除法
AcWing 794. 高精度除法原创 2022-12-26 16:47:47 · 173 阅读 · 0 评论 -
AcWing 793. 高精度乘法
AcWing 793. 高精度乘法原创 2022-12-26 15:58:02 · 99 阅读 · 0 评论 -
Acwing 790. 数的三次方根
Acwing 790. 数的三次方根原创 2022-12-25 22:09:36 · 89 阅读 · 0 评论 -
ACWing 792. 高精度减法
ACWing 792. 高精度减法原创 2022-12-24 13:31:04 · 135 阅读 · 0 评论 -
AcWing 791. 高精度加法
AcWing 791. 高精度加法原创 2022-12-24 13:21:30 · 148 阅读 · 0 评论 -
AcWing 刷题记录 1519.密码
AcWing 刷题记录 1519.密码思路每输入一组数据,进行更改密码字符串,之后比较原密码与修改之后的密码是否相等,不相等记录加一。代码#include<iostream>using namespace std;const int N = 1010;string changed_name[N],changed_pwd[N];// 修改字符串函数string change(string pwd){ string res; for(auto c:pwd)原创 2022-05-06 10:29:38 · 140 阅读 · 0 评论 -
ACwing刷题笔记 1477.拼写正确
ACwing刷题笔记 1477.拼写正确思路首先将字符串中所有的数字全部取出转化成整数类型,然后累加求和,之后对求和结果转化成字符串,之后循环遍历字符串,将每一个字符对应的单词输出即可代码#include<iostream>using namespace std;int main(){ string n; cin>>n; int s = 0; for(auto c:n) s += c - '0'; stri原创 2022-05-04 16:16:01 · 357 阅读 · 0 评论 -
ACwing刷题笔记 1473.A+B格式
ACwing刷题笔记 1473.A+B格式思路先将数字转换成字符串,然后遍历字符串,每遍历一个数字将该数字存入一个新的字符串(字符串拼接),每三个字符就打上一个逗号(注意-99999这种,当i=0时不需要打上逗号,因为此时是负号,以及num[i-1] = '-'此时也不需要添加逗号,因为下一个就是负号)代码#include<iostream>using namespace std;int main(){ int a,b; cin>>a>>原创 2022-05-04 13:41:22 · 150 阅读 · 0 评论 -
ACwing刷题笔记 20.用两个栈实现队列
ACwing刷题笔记 20.用两个栈实现队列代码思路:先将所有的元素写入栈中,appendTail传入的数据全部压入栈中,另一个栈当作输出栈,用于出队操作。每次deleteHead时,若输出栈为空,将输入栈的全部数据依次弹出并压入输出栈,这样输出栈从栈顶往栈底的顺序就是队列从队首往队尾的顺序。class MyQueue {public: /** Initialize your data structure here. */ stack<int> stk,cache;原创 2022-05-04 10:41:24 · 252 阅读 · 0 评论 -
ACwing 19:二叉树的下一个节点
ACwing 19:二叉树的下一个节点思路:如果当前节点的右孩子节点不为空,那么找到当前节点的右孩子的最后一个不为空的左孩子节点,最后一个不为空的左孩子节点即为中序遍历序列的下一个节点如果当前节点的右孩子节点为空,那么,从父节点一直想上找,判断当前的父节点是不是其父节点的左孩子节点,如果是的话该节点的父节点就是中序遍历的下一个节点/** * Definition for a binary tree node. * struct TreeNode { * int val; *原创 2022-05-02 16:41:46 · 558 阅读 · 0 评论 -
ACwing刷题笔记 18.重建二叉树
ACwing刷题笔记 18.重建二叉树题目思路思路:只要我们在中序遍历中定位到根节点,那我们就可以直到左子树和右子树中节点的数目,那么我们也就知道左子树和右子树的遍历结果。然后就可以递归构造左子树和右子树。 在中序遍历对根节点进行定位时,一种简单的方法是直接扫描中序遍历的结果找到根节点,但是时间复杂度高,我们采用哈希表来快速定位根节点(空间换时间),对于哈希映射中每一个键值对,键表示一个元素,值表示其在中序遍历中的出现位置。代码/** * Definition for a binary tr原创 2022-05-02 10:34:27 · 196 阅读 · 0 评论 -
ACwing 17. 从尾到头打印链表
ACwing刷题笔记 17. 从尾到头打印链表思路 输出的顺序是从后往前,那么可以使用栈这种数据结构,每次经过一个节点,就将该节点放入栈中。当遍历完整个链表之后,在从栈顶开始依次输出各个节点的值。代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} *原创 2022-05-01 11:04:24 · 597 阅读 · 0 评论 -
ACwing刷题笔记 16.替换空格
ACwing刷题笔记 16.替换空格思路思路:首先遍历一遍字符串,这样就可以统计出字符串中空格的字数,同时也统计该字符串的字符个数,然后计算新的字符串长度,重新设定字符串长度,新的字符串长度等于原来的长度加上2 * 空格数目。之后,准备两个指针,p1指向原始的字符串末尾(‘\0’),p2指向新的字符串末尾,接下来移动指针p1,如果当前指向的字符不是空格,那么就将该字符复制到p2指向的位置,然后继续向下移动p1,如果p1指向的字符是一个空格,那么将p2位置填充’%20’,p2继续向下移动,p1移动一格。原创 2022-04-30 11:49:51 · 284 阅读 · 0 评论 -
ACwing15: 二维数组的查找
ACwing15: 二维数组的查找算法流程:首先选取数组右上角的数字,如果该数字等于要查找的数字,则查找过程结束。如果该数字大于要查找的数字,那么剔除该数字所在的列;如果该数字小于要查找的数字,则剔除这个数字所在的行,也就是我们每次要查找的数字都是右上角那个数字,如果不相等,那么剔除一行或者一列,这样每一步都可以缩小查找的范围。注意程序的鲁棒性class Solution {public: bool findNumberIn2DArray(vector<vector<int>原创 2022-04-29 17:08:24 · 306 阅读 · 0 评论 -
ACwing 14:不修改数组找出重复的数字
ACwing 14:不修改数组找出重复的数字 我们把从1~n的数字从中间的数字m分为两部分,前面一半为1-m,后面一半是m+1-n,如果1-m的数字超过了m,那么这一半的区间内一定包含重复的数字;否则另外一半m+1-n的区间里面一定包含重复的数字。我们可以继续把重复数字的区间一分为二,直到找到一个重复的数字。这其实就是二分法的使用,只不过多了统计数字的步骤!!!class Solution {public: int duplicateInArray(vector<int>&原创 2022-04-29 15:57:20 · 322 阅读 · 0 评论 -
acwing——796.子矩阵的和
acwing——796.子矩阵的和题目输入一个n行m列的整数矩阵,再输入q个询问,每个询问包含四个整数x1, y1, x2, y2,表示一个子矩阵的左上角坐标和右下角坐标。对于每个询问输出子矩阵中所有数的和。输入格式第一行包含三个整数n,m,q。接下来n行,每行包含m个整数,表示整数矩阵。接下来q行,每行包含四个整数x1, y1, x2, y2,表示一组询问。输出格式共q行,每行输出一个询问的结果。数据范围1≤n,m≤10001≤n,m≤1000,1≤q≤2000001≤q≤2000原创 2022-02-27 22:23:23 · 241 阅读 · 0 评论 -
AcWing - 前缀和
题目描述输入一个长度为n的整数序列。接下来再输入m个询问,每个询问输入一对l, r。对于每个询问,输出原序列中从第l个数到第r个数的和。输入格式第一行包含两个整数n和m。第二行包含n个整数,表示整数数列。接下来m行,每行包含两个整数l和r,表示一个询问的区间范围。输出格式共m行,每行输出一个询问的结果。数据范围1≤l≤r≤n,1≤n,m≤100000,−1000≤数列中元素的值≤1000输入样例5 32 1 3 6 41 21 32 4输出样例3610#inc原创 2022-02-27 21:34:47 · 91 阅读 · 0 评论 -
基础算法第二课——高精度算法
基础算法第二课——高精度一、高精度算法常用在:A + B:两个大整数相加A - B:两个大整数相减A x a:一个大整数乘一个小整数A / a: 一个大整数除以一个小整数二、大整数的存储用一个数组来存储大整数的每一位上的数字,将大整数按从低位到高位存储,就是将数的个位存储到数组的第一位,十位存储到数组的第二位,这样做的目的在于:如果两个数组进行相加,那么数组元素对应相加,产生的进位就会进入数组下一位元素。三、A + B算法#include<iostream>#includ原创 2022-02-27 21:03:52 · 365 阅读 · 0 评论 -
ACWing基础算法第一课
ACWing基础算法第一课算法模板先背调,写过的题目再写一遍一、排序算法1.快速排序一般做法:确定分界点x:q[l],q[(l+r)/2],q[r] 随机调整范围:使得x左边的数都小于或者等于x,使得x右边的数都大于或者等于x递归处理左右两段。最难的是第二步,有一种简单的做法:* 首先开辟两个空数组a,b,* 之后循环遍历q[l~r],将小于x的放进a,大于x的放进b* 之后将a,b的内容放进q算法模板:#include<iostream>using name原创 2022-02-25 21:59:27 · 591 阅读 · 0 评论 -
786. 第k个数
786. 第k个数#include<iostream>using namespace std;const int N = 100010;int q[N];int k;void quick_sort(int q[],int l,int r){ if(l >= r) { return ; } int x = q[(l + r) / 2]; int i = l - 1; int j = r + 1;原创 2021-11-02 21:15:24 · 118 阅读 · 0 评论 -
789. 数的范围
789. 数的范围#include<iostream>using namespace std;const int N =100010;int n,m;int q[N];int main(){ scanf("%d%d",&n,&m); for(int i = 0; i < n; i++) { scanf("%d",&q[i]); } //这道题要求我求出target的范围 也就是一个数组有多原创 2021-11-02 20:47:53 · 237 阅读 · 1 评论 -
787. 归并排序
787. 归并排序#include<iostream>using namespace std;const int N = 1000010;int n;int q[N],temp[N];void merge_sort(int q[],int l,int r){ if(l >= r) { return ; } int mid = (l + r) / 2; //递归划分左边以及右边 merge_sort(q,原创 2021-11-02 20:41:43 · 99 阅读 · 0 评论 -
785. 快速排序
785. 快速排序#include<iostream>using namespace std;const int N = 1e6 + 10;int n;int q[N];void quick_sort(int q[],int l,int r){ //判定边界 有没有数字 if(l >= r) { return ; } int x = q[(l + r)/2];//标杆 //指向边界的两侧 /原创 2021-11-02 11:27:21 · 99 阅读 · 0 评论