自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 华为机试4.20

华为机试,太难了第一题,注释是我想不出来就放弃了的dfs#include<bits/stdc++.h>using namespace std;const int N = 110;// int a[N];int res;int a[25] = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8};int main(){ int n; cin >> n;

2022-04-29 10:54:51 258

原创 二维数组中的查找

原题链接利用其部分排序的性质,从右上角开始,采用BFS方法。花了好长时间啊TAT,算是对BFS实现加深印象了吧。自己好菜555class Solution {public: bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) { int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1}; if (matrix.

2022-01-29 16:36:11 705

原创 剑指offer:数组中的重复数字

原题链接随机返回一个值有点抽象。。class Solution {public: int findRepeatNumber(vector<int>& nums) { int n = nums.size(); vector<int> idx(n); vector<int> res; for (auto num : nums) { idx[num] +

2022-01-22 11:06:55 207

原创 剑指offer:斐波那契数列

原题链接//递归会超时,使用滚动数组的思想。class Solution {public: int fib(int n) { if (n == 0 || n == 1) return n; int p = 0, q = 0, r = 1; for (int i = 1; i < n; i ++) { p = q; q = r; r = p + q;

2022-01-19 15:06:06 92

原创 第二讲:优劣解距离法Topsis

极大型指标:效益型指标极小型指标:成本型指标中间型指标:越接近某个值越好区间型指标:落在某个区间最好指标正向化极小型→极大型公式:max - x也可以 1/x (x > 0 for x in list)标准化处理:消除量纲的影响标准化处理计算&归一化拓展wj 为不同的权重,可以使用层次分析法。...

2022-01-18 17:43:39 180

原创 剑指offer:用两个栈实现队列

添加链接描述class CQueue { stack<int> s1, s2;public: CQueue() { while (!s1.empty()) { s1.pop(); } while (!s2.empty()) { s2.pop(); } } void appendTail(int value)

2022-01-18 12:15:39 3824

原创 跳跃游戏III

BFS跳跃游戏III#include<bits/stdc++.h>using namespace std;class Solution {public: bool canReach(vector<int>& arr, int start) { if (arr[start] == 0) return true; int n = arr.size(); vector<bool> st(n);//这里写

2022-01-16 12:38:40 2501

原创 动态规划:混合背包问题

01背包 f[i][j] = max(f[i-1][j], f[i-1][j-v[i]] + w[i]完全背包 f[i][j] = max(f[i-1][j], f[i][j-v[i]] + w[i]多重背包 f[i][j] = max(f[i-1][j], f[i-1][j-v[i]]+w[i], f[i-2][j-2v[i]]+2w[i], …)多重背包二进制优化后,可以变成多个01背包问题求解混合背包问题#include<bits/stdc++.h>using namespac

2021-12-12 17:32:03 498

原创 关于二分边界问题的总结

对于搜索过程中, high 位置的作用是减少搜索空间而 low 的作用是从0开始一直向着目标数字前进搜索到的时候返回它,是一个一直逼近的过程。所以结论是,返回左边界,即l。先这样吧,有别的再补充...

2021-12-04 20:49:26 103

原创 第一章:动态规划

1.1 数字三角形模型集合角度考虑DP问题数字三角形摘花生

2021-10-11 23:59:44 58

原创 算法基础课:八数码

别的题解y总思路的题解

2021-09-22 22:10:00 84

原创 算法基础课:走迷宫

#include <iostream>#include <cstring>#include <algorithm>#include <queue>#include <vector>using namespace std;const int N = 110;typedef pair<int, int> PII;int d[N][N];int n, m;int g[N][N];int bfs(){ int

2021-09-21 20:12:49 65

原创 算法基础课:合并集合

#include<iostream>using namespace std;const int N = 1e5 + 10;int s[N], p[N];int find(int x){ if (p[x] != x) p[x] = find(p[x]); return p[x];}void merge(int a, int b){ int x = find(a), y = find(b); p[x] = y;}void query(int a,

2021-09-20 15:55:10 82

原创 算法基础课:最大异或对

1.暴力做法for i: 1-nfor j: i-n异或,取最大值。2.如何优化从高到低,依次找0(遍地飘零)

2021-09-20 15:33:04 78

原创 算法基础课:滑动窗口

#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 1e6 + 10;int a[N], q[N];//q[N]维护的是数组下标。对应的a[q[i]]应当随着i的增加而增加/减少int main(){ int n, k; cin >> n >> k; int hh = 0, tt

2021-09-19 19:27:03 86

原创 算法基础课:模拟队列

#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 100010;int q[N];int hh, tt;void init(){ hh = 0, tt = -1;}int main(){ int m; cin >> m; init(); string op;

2021-09-19 16:38:27 65

原创 表达式求值

给定一个表达式,其中运算符仅包含 +,-,*,/(加 减 乘 整除),可能包含括号,请你求出表达式的最终值。注意:数据保证给定的表达式合法。题目保证符号 - 只作为减号出现,不会作为负号出现,例如,-1+2,(2+2)*(-(1+1)+2) 之类表达式均不会出现。题目保证表达式中所有数字均为正整数。题目保证表达式在中间计算过程以及结果中,均不超过 231−1。题目中的整除是指向 0 取整,也就是说对于大于 0 的结果向下取整,例如 5/3=1,对于小于 0 的结果向上取整,例如 5/(1−4)=

2021-09-19 16:14:56 71

原创 算法基础课:模拟栈

#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 100010;int stk[N], tt;int main(){ int m; cin >> m; string op; int x; while (m -- ) { cin >&gt

2021-09-18 22:09:28 57

原创 算法基础课:双链表

双链表在k左边插入时,add(l[k], x)即可

2021-09-18 21:55:30 48

原创 算法基础课:连通块中点的数量

连通块中点的数量思路size[N]: 连通块的大小,只有祖先节点有意义p[N]: 并查集,初始值就是它自己。merge(int a, int b): 让a所在的集合并入到b所在的集合,b的祖先size值加上a的祖先size注意C情况下,a和b是可能相等的,需要加入判断暂时需要解释的就这些,其他的有问题再说吧代码#include<bits/stdc++.h>using namespace std;const int N = 100010;int p[N], si[N],

2021-09-13 22:54:29 78

原创 算法设计与分析 week1

第一章 算法引论算法的性质:① 输入:有零个或多个由外部提供的量作为算法的输入。② 输出:算法产生至少一个量作为输出。③ 确定性:组成算法的每条指令是清晰的,无歧义的。④ 有限性:算法中每条指令的执行次数是有限的,执行每条指令的时间也是有限的。操作系统是一个在无限循环中执行的程序,因而不是一个算法。操作系统的各种任务可以看成一些单独的问题,每个问题由操作系统中的一个子程序通过特定的算法来实现。该子程序得到输出结果后便终止。算法复杂性分析评价一个算法:正确性,健壮性,复杂性,可读性,简单性算

2021-09-13 14:35:29 87

原创 算法基础课:Trie树

Trie: 高效存储和查找字符串链表,Trie,堆关系存储从前往后遍历字符每个单词的最后打上标记,以知晓该点是否有单词查找

2021-09-11 17:36:09 47

原创 双指针算法

双指针核心思想:将O(N^2)的朴素算法优化到 O(N)两个序列例:归并一个序列例:快排//模板for(i = 0; j = 0; i < n; i++){ while (j < i && check(i, j)) j++;}简单应用将单词转化成单独占有一行例:abc def ghi=>abcdefghi题目:最长连续不重复子序列给定一个长度为 n 的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。输入格式第一行

2021-09-03 20:39:52 49

原创 算法基础课:位运算

n的二进制表示中第k位是几n >> k看个位是几 x &1

2021-09-03 20:38:57 31

原创 前缀和与差分

输入一个长度为 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

2021-09-03 15:20:36 67

原创 Acwing 每日一题: 3824. 在校时间

原题链接思路:若遇到只有一天放假,达达将会待在学校,其余放假的情况达达一直回家。只需将达达这个一天放假的状态标注成别的数即可。#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 110;int T, n, a[N];int begin, end;int main(){ cin >> T; w

2021-08-30 19:44:13 67

原创 算法基础课:KMP算法

暴力算法S[N]——长数组, p[M]——短数组for(int i = 1; i <= n;i ++){ bool flag = true; for (int j = 1; j <= m; j ++) if (s[i] != p[j] { flag = false; break; }} next[i]:以i为终点的后缀与以1为起点的前缀的最长相同长度next[i] = j :p[1~j] = p[i - j + 1, i] //next[i]计算过

2021-08-27 14:46:02 74

原创 算法基础课:哈希表

存储结构:开放寻址法添加:从第k个开始,找到第一个非空(坑位)查找:从第k个开始,如果当前坑位有人且不是x,看下一个坑位;若没有人,说明x不存在删除:做一个特殊标记#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 100003;int h[N], e[N], ne[N], idx;string op;int n,

2021-08-27 09:43:59 68

原创 算法基础课:食物链

题目链接动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形。A 吃 B,B 吃 C,C 吃 A。现有 N 个动物,以 1∼N 编号。每个动物都是 A,B,C 中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这 N 个动物所构成的食物链关系进行描述:第一种说法是 1 X Y,表示 X 和 Y 是同类。第二种说法是 2 X Y,表示 X 吃 Y。此人对 N 个动物,用上述两种说法,一句接一句地说出 K 句话,这 K 句话有的是真的,有的是假的。当一句话满足下列三条之

2021-08-25 17:12:41 861

原创 算法基础课:图论

最短路:单源最短路:从1号点到n号点①所有边权都是正数:朴素Dijkstra(O(n^2))、堆优化Dijkstra(O(mlogn))②存在负权边Bellman-Ford O(nm)SPFA O(m) 最坏O(nm)多源汇(起点、终点)最短路Floyd O(n^3)m和n^2一个级别 稠密图m和n一个级别 稀疏图结构图如下:难点:建图朴素Dijkstra集合s:已经确定了最短距离的点① dis[1] = 0, dis[i] = +inf;②for i : 0 ~ nt ←不在

2021-08-25 15:57:34 105

原创 操作系统第一章

什么是操作系统定义资源管理程序,控制程序分类操作系统内核抽象:进程<——CPU文件<——磁盘地址空间<——内存特征:并发:计算机系统同时存在多个运行程序共享:程序同时访问互斥共享各种资源虚拟:每个程序“独占”一个完整的计算机。对于这个程序来说,看上去是独立使用。异步:服务的完成时间不确定,可能失败。操作系统结构简单结构单体分层结构最底层硬件,最高层用户界面,每层建立在低层之上微内核结构外核结构虚拟机结构...

2021-08-20 15:37:47 78

原创 算法提高课:树状数组

基本原理应用:快速求前缀和修改某一个数分成最多logx个部分,算1-x总和的时候,在加logn个数就可以求出来,复杂度O(logn)2 ^ i1 是x的二进制表示的最后一位1c[x]表示以x为右端点,长度lowbit的区间内所有数的和图中C12应为C9-C12.所有C的关系如图:x> 0, 必然存在最后一位1x = ----- 100…0, 0 y有k个Cx = 以x结尾,长度为2^k的区间和找到x的所有子节点x-1每一次去掉一个最后的1,去地道k次、如何通过子节

2021-08-20 14:19:24 78

原创 LeetCode 406. Queue Reconstruction by Height

原题链接思路:1.贪心将身高从高到低排序。因为身高更高的人要求更少,优先插入更高的人。若两者身高相同,先插入条件少的(看到的人更少)。#include<vector>class Solution {public: vector<vector<int>> reconstructQueue(vector<vector<int>>& p) { sort(p.begin(), p.end(), [](vector

2021-08-18 16:42:10 86

原创 LeetCode 122. Best Time to Buy and Sell Stock II

原题链接class Solution {public: int maxProfit(vector<int>& prices) { int n=prices.size(); int res = 0; for (int i = 1; i < n; i++) { if (prices[i] > prices[i - 1]) { res += prices[i] - prices[i

2021-08-18 15:16:48 78

原创 LeetCode 763. 划分字母区间

763class Solution {public: vector<int> partitionLabels(string s) { vector<int> res; unordered_map<char, int> last;//哈希表,存放字母最后出现的位置 for (int i = 0; i < s.size(); i++) { last[s[i]] = i;

2021-08-18 11:15:43 40

原创 LeetCode 452. 用最少数量的箭引爆气球

452在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以无限地前进。我们想找到使得所有气球全部被引爆,所

2021-08-18 10:14:16 46

原创 LeetCode 605:Can Place Flowers

605贪心即可假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给定一个花坛(表示为一个数组包含 0 和 1,其中 0 表示没种植花,1 表示种植了花),和一个数 n 。能否在不打破种植规则的情况下种入 n 朵花?能则返回 True,不能则返回 False。class Solution {public: bool canPlaceFlowers(vector<int>& flowerbed, in

2021-08-18 09:29:52 53

原创 Acwing 1453

1453题: 移掉K位数字#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 100010;string s, res;int main(){ int k; cin >> s >> k; //消除逆序对 res = "0"; for (int i = 0; i &

2021-08-17 14:30:01 42

原创 Leetcode刷题:135

CandyThere are n children standing in a line. Each child is assigned a rating value given in the integer array ratings.You are giving candies to these children subjected to the following requirements:Each child must have at least one candy.Children wit

2021-08-16 16:02:45 53

原创 算法基础课:单链表

实现一个单链表,链表初始为空,支持三种操作:向链表头插入一个数;删除第 k 个插入的数后面的数;在第 k 个插入的数后插入一个数。现在要对该链表进行 M 次操作,进行完所有操作后,从头到尾输出整个链表。注意:题目中第 k 个插入的数并不是指当前链表的第 k 个数。例如操作过程中一共插入了 n 个数,则按照插入的时间顺序,这 n 个数依次为:第 1 个插入的数,第 2 个插入的数,…第 n 个插入的数。输入格式第一行包含整数 M,表示操作次数。接下来 M 行,每行包含一个操作命令,操作命令可能

2021-08-16 11:05:41 97

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除