- 博客(104)
- 收藏
- 关注
原创 vue项目不能正常启动
项目会弹出浏览器,但是没有正常访问,查询后可能是nodejs版本过高,但是我又不想重新下载,可以试试如下指令,在进行启动。
2023-03-26 22:48:59
547
1
原创 LeetCode12 整数转罗马数字
用打表法,取出其中特殊的12个。class Solution {public: string intToRoman(int num) { int val[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; string util[] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}
2022-05-17 23:01:21
153
原创 leetcode11 盛水最多的容器
最开始我没有很好的思路只能暴力求解,样例可以过,但是时间复杂度高了最终通不过,只能进一步优化。//暴力求解class Solution {public: int maxArea(vector<int>& height) { int res = 0, v = 0; for (int i = 0; i < height.size(); i ++) { for(int j = i + 1; j < heig
2022-05-16 11:32:06
100
原创 c++中有关哈希表的STL操作
set基于红黑树实现,可以进行去重和排序操作。O(logn)。一些常用的函数有:s.insert(x);s.erase(x);s.size();s.find(x);s.count(x); //因为有去重性质,count()统计出现的次数要么是0,要么是1,可以替代find()s.empty();unordered_setO(1)。一些常用的函数:s.insert();s.erase();s.find();s.count();s.empty();map<.
2022-03-18 17:34:59
1560
1
原创 与二进制有关的一些操作
n&1把n与1按位与,因为1除了最低位,其他位都为0,所以按位与结果取决于n最后一位,如果n最后一位是1,则结果为1.反之结果为0。&运算通常用于二进制取位操作,例如一个数 & 1的结果就是取二进制的最末位。这可以用来判断一个整数的奇偶,二进制的最末位为0表示该数为偶数,最末位为1表示该数为奇数。...
2022-03-17 09:41:18
169
原创 c++字符串转数字
例如:输入数字1234;string s;cin >> s;for(auto x : s) cout << x - '0' << endl;输出结果:1234
2022-02-25 15:42:36
495
原创 数论
1、质数定义:在大于1的整数中,如果只包含1和本身这两个约数,就被称为质数(素数)。小于等于1的数既不是质数,也不是合数。质数的判定----试除法\sqrt{n}bool is_prime(int u) { if (u < 2) return false; for (int i = 2; i <= u / i; i ++ ) { if (u % i == 0) return false; } return tr
2021-05-13 07:47:03
120
原创 最短路算法
一、朴素版Dijkstraint n, m; //n:点的个数 m:边的条数int g[N][N]; //存储每条边 int dist[N]; //存储1号点到每个点的最短距离bool st[N]; //存储每个点的最短路是否已经确定// 求1号点到n号点的最短路,如果不存在则返回-1int dijkstra(){ memset(dist, 0x3f, sizeof dist); dist[1] = 0; for(int i = 0; i &
2021-05-05 15:04:37
111
原创 DFS
123的全排列作例子,每个叶节点就是一个答案深搜就是在每个结点不停往深里搜索的搜索方法。深搜很重要的有回溯和剪枝。回溯必须要还原现场打一个比方:回溯就相当于父母把你放在家里出去了,等父母回来如果你把房间弄乱了后果很严重。回溯也是这个道理回溯的代码一般是这样的:for(......){ st[i] = true; //结点被访问 /*......*/; //做一些其他的操作 dfs(u + 1); //递归下一层 st[i] = false; /*.....*/; //还原现场}
2021-04-19 21:30:42
104
原创 并查集
干什么:将两个集合合并询问两个元素是否在一个集合当中并查集可以在近乎O(1)的时间复杂度快速支持以上两个操作。基本原理用树的形式维护所有集合,每一个集合的编号是根节点的编号,对于每一个点,都存储一个父节点,当想求某一个点属于哪个集合的时候,可以根据这个点的父节点往上一直找到根节点,当前结点属于的集合的编号就是树根的编号问题1:如何判断树根:if(p[x] == x);问题2:如何求x的集合编号:while(p[x] != x) x = p[x];问题3:如何合并两个集合:px是x的集合编
2021-04-18 19:52:24
100
原创 离散化
离散化,把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。适用范围:数组中元素数值很大,但个数不是很多。比如将a[]=[1,3,100,2000,500000]映射到[0,1,2,3,4]这个过程就叫离散化。
2021-04-11 17:34:37
92
原创 区间合并
什么是区间合并:假如给定 n 个闭区间[ai,bi],其中i=1,2,…,n。任意两个相邻或相交的闭区间可以合并为一个闭区间。例如,[1,2]和[2,3]可以合并为[1,3],[1,3]和[2,4]可以合并为[1,4],但是[1,2] 和 [3,4] 不可以合并。思路按区间左端点排序扫描整个区间,扫描过程中将所有有交集的区间合并,第i个区间与当前维护的区间的关系分三种情况:第i个区间在当前区间的内部,区间合并完以后左右端点st,ed不变第i个区间与当前区间有交集,但不在内部,区间合并
2021-04-11 17:22:07
2400
原创 前缀和
什么是前缀和原数组: a[1], a[2], a[3], a[4], a[5], …, a[n]前缀和 Si为数组的前 i项和前缀和: S[i] = a[1] + a[2] + a[3] + … + a[i]注意: 前缀和的下标一定要从 1开始, 避免进行下标的转换前缀和的作用快速求出元素组中某段区间的和s[i] = s[i - 1] + a[i];模板int main(){ cin >> n >> m; for(int i = 1; i
2021-04-09 20:10:38
120
原创 二分查找算法模板
算法思路:假设目标在闭区间**[l , r]中, 每次将区间长度缩小一半,当l = r**时,我们就找到了目标 .版本1当我们将区间怕**[l , r]划分成[l, mid]和[mid + 1 , r]时,其更新操作是r = mid** 或者 l = mid + 1; , 计算mid时不需要加1 .int bsearch_1(int l, int r){ while(l < r){ int mid = l + r >> 1; if(check(mid)) r = m
2021-04-02 23:08:21
103
原创 基于快排的快速选择算法
题目描述给定一个长度为 n 的整数数列,以及一个整数 k,请用快速选择算法求出数列从小到大排序后的第 k 个数。时间复杂度O(n)思路:要找到的第k个数如果比快排分出来左边个数小,就递归左边; 如果第k个数比分出来左边个数大,就递归右边完整代码#include<iostream>using namespace std;const int N = 1e6 + 10;int q[N];int n, k;int quick_sort(int l, int r, int
2021-03-20 15:29:28
447
原创 超简洁10行代码实现快速排序
话不多说,直接贴代码以前写过一个快速排序的代码,(点击此处查看),是模仿算法第四版的作者写的,这次更加的简洁,算是进阶版吧, 感谢y总.说明一下, 这里x =q[l + r >> 1]就是x = q[(l + r) / 2], 取中位数. 当然也可以写x = q[l]和x = q[r].完整代码#include<iostream>using namespace std;const int N = 1e6 + 10;int n;int q[N];void qu
2021-03-20 14:50:18
387
3
原创 Acwing-递归实现指数型枚举
题目描述:从 1∼n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。输入样例:3输出样例:322 311 31 21 2 3思考过程:涉及到递归,脑中要有一颗递归搜索树,叶结点即使结果参数确定:1.当前考虑第几个数2.前面的数有没有选bool st[]完整代码:#include<iostream>#include<algorithm>using namespace std; const int N = 20;bool
2021-03-19 22:06:42
107
原创 LeetCode-反转链表Ⅱ
题目描述:给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。实例输入:head = [1,2,3,4,5], left = 2, right = 4输出:[1,4,3,2,5]思考示意图完整代码/** * Definition for singly-linked list. * struct ListNode { * int val;
2021-03-18 23:23:26
139
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人