算法
CoderZhuuu
practice
展开
-
C++实现智能指针部分功能(UniquePtr, SmartPtr, WeakPtr), head only(更新中)
先放代码#pragma once#include <memory> /* For std::move, std::forward, std::unique_ptr */#include <utility> /* For std::exchange */#include <type_traits> /* For template check */#include <atomic> /* For std::atomic *//* Deleter原创 2021-05-10 20:48:50 · 316 阅读 · 0 评论 -
c++ 实现递归/非递归二叉树遍历
TreeNode数据结构struct TreeNode { int val; TreeNode * left; TreeNode * right; TreeNode(const int & _val = int(), TreeNode * _left = nullptr, TreeNode * _right = nullptr) : val(_val), left(_le...原创 2020-04-23 15:22:47 · 190 阅读 · 0 评论 -
洛谷 P1678 烦恼的高考志愿
P1678 烦恼的高考志愿二分法(200+ms)#include <cstdio>#include <algorithm>#define MAXN 100010#define RE registerusing namespace std;int a[MAXN];int b[MAXN];inline int read() { int x = 0;...原创 2020-04-20 18:57:14 · 365 阅读 · 0 评论 -
洛谷 P1873 砍树
P1873 砍树二分答案(300+ms)#include <cstdio>#include <algorithm>#define MAXN 1000100#define LL long long#define RE registerusing namespace std;LL a[MAXN];inline LL read() { LL x = ...原创 2020-04-20 16:56:32 · 545 阅读 · 0 评论 -
洛谷 P1102 A-B 数对
P1102 A-B 数对二分查找解法(100+ms)#include <cstdio>#include <algorithm>#define MAXN 200020using namespace std;int a[MAXN];inline int read() { int x = 0, sign = 0; char c = getchar();...原创 2020-04-20 11:50:46 · 378 阅读 · 0 评论 -
洛谷 P2249 【深基13.例1】查找
P2249 【深基13.例1】查找常规版本(400+ms)#include <iostream>#define MAXN 1000010using namespace std;int a[MAXN];int main() { ios::sync_with_stdio(false); cin.tie(0); int n, m; cin >> n ...原创 2020-04-20 11:14:25 · 586 阅读 · 1 评论 -
c++ 随机生成数独(不保证唯一解)
给出一个最简单的生成数独初盘的程序,不保证有唯一解,终盘的正确性通过填充的过程来确定,可以用舞蹈链算法求解该数独得到其中一个解随机生成的方法就算交换行和列然后随机挖洞这里有一点要注意的就是交换的行和列必须处于同一宫中,要不然交换之后保证不了正确性然后就是随机挖洞,可以直接随机一个坐标,或者用洗牌算法(类似于扫雷初盘的生成)vector<vector<int> &...原创 2020-04-08 20:44:04 · 1236 阅读 · 0 评论 -
c++ 舞蹈链算法求解数独问题 控制台版本 带注释
#include <iostream>#include <vector>#include <algorithm>#include <unordered_map>#define DELPOINTER(p) if(nullptr!=(p)){delete[] (p),(p)=nullptr;}#define DO(sth) for (DLXN...原创 2020-04-08 09:15:30 · 861 阅读 · 0 评论 -
c++ spfa 链式前向星版本加上SLF优化版本的实现
普通版本#include <iostream>#include <queue>#include <cstring>#include <algorithm>#include <cstdio>#include <limits.h>const int INF = 0x3f3f3f3f;const int MAXN...原创 2020-04-03 19:07:55 · 251 阅读 · 0 评论 -
c++ Bullman-Ford算法前向星版本实现
#include <iostream>#include <queue>#include <cstring>#include <algorithm>#include <cstdio>#include <limits.h>using namespace std;const int INF = 0x3f3f3f3f;...原创 2020-04-03 19:06:25 · 190 阅读 · 0 评论 -
c++ Dijsktra算法邻接表版本和链式前向星版本的实现(堆优化版本)
邻接表版本#include <iostream>#include <queue>#include <cstring>#include <algorithm>#include <cstdio>#include <limits.h>const int INF = 0x3f3f3f3f;const int MAX...原创 2020-04-03 18:45:57 · 255 阅读 · 0 评论 -
c++ 二维凸包 Graham 扫描线算法模板
该算法是在gift-warping算法的基础上通过排序来预处理数据然后降低时间复杂度的#include <iostream>#include <memory>#include <cstdlib>#include <cstdio>#include <cstring>#include <string>#inclu...原创 2020-03-31 11:09:16 · 560 阅读 · 0 评论 -
c++ Java 二维凸包 Andrew 算法模板
模板题链接 P2742 [USACO5.1]圈奶牛Fencing the Cows /【模板】二维凸包先排序(先按 y 再按 x ),然后计算凸包,一共两次扫描,第一次计算下凸包,第二次计算上凸包(计算上凸包的时候可以不用判断top,如果要判断可以加一个top大于下凸包的元素个数)附上c++模板#include <iostream>#include <memory...原创 2020-03-31 01:19:34 · 296 阅读 · 0 评论 -
c++ 实现变进制数
#include <iostream>#include <memory>#include <cstdlib>#include <cstdio>#include <cstring>#include <string>#include <algorithm>using namespace std;#de...原创 2020-03-07 15:01:40 · 232 阅读 · 0 评论 -
位运算小技巧总结(更新中 2020/4/24)
想到哪写到哪交换两个数字void swap(int & a, int & b){ a ^= b; b ^= a; a ^= b;}判断奇偶if(1 == (n & 1)) // 奇数if(0 == (n & 1)) // 偶数取余数n % x 相当于 n & (x - 1)乘以二和除以...原创 2020-03-03 01:07:35 · 244 阅读 · 0 评论 -
四平方数和定理 leetcode 279 完全平方数
记录一下四平方数和定理的解法int numSquares(int n) { while (0 == (n & 0x3)) { n >>= 2; } if (7 == (n & 0x7)) { return 4; } for (int i = sqrt(n); i > 0; --i) { int j = sqrt(n - i * i);...原创 2020-03-02 23:22:03 · 217 阅读 · 0 评论 -
洛谷 P3368 树状数组(区间修改 单点查询)
就是区间修改和单点查询,这个题目可以用来检查自己写的对不对#include <iostream>#define lowbit(x) (x)&(-(x))using namespace std;int n;int c[5000005];int a[5000005];void update(int x, const int & val) { while ...原创 2020-03-01 22:35:20 · 191 阅读 · 0 评论 -
洛谷 P1428 小鱼比可爱 树状数组解法
题目描述人比人,气死人;鱼比鱼,难死鱼。小鱼最近参加了一个“比可爱”比赛,比的是每只鱼的可爱程度。参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数值,表示这只鱼的可爱程度,很显然整数越大,表示这只鱼越可爱,而且任意两只鱼的可爱程度可能一样。由于所有的鱼头都朝向左边,所以每只鱼只能看见在它左边的鱼的可爱程度,它们心里都在计算,在自己的眼力范围内有多少只鱼不如自己可爱呢。请你帮...原创 2020-03-01 21:28:09 · 366 阅读 · 0 评论 -
c++实现最坏时间为线性时间的快速选择算法
上图是算法导论第三版第九章9.3所给出的步骤,根据这个步骤可以得到下面的代码/* 找中位数,只有五个数,直接排序取中间那个即可 */int findMedian(vector<int> & nums, const int & left, const int & right) { sort(nums.begin() + left, nums.begi...原创 2020-02-28 00:09:51 · 515 阅读 · 0 评论 -
蓝桥杯_算法训练_最大最小公倍数
试题 算法训练 最大最小公倍数提交此题 资源限制时间限制:1.0s 内存限制:256.0MB问题描述已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。输入格式输入一个正整数N。输出格式输出一个整数,表示你找到的最小公倍数。样例输入9样例输出504数据规模与约定1 <= N <= 106。...原创 2020-02-04 20:29:11 · 184 阅读 · 0 评论 -
蓝桥杯_算法训练_区间k大数查询
试题 算法训练 区间k大数查询提交此题 资源限制时间限制:1.0s 内存限制:256.0MB问题描述给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。输入格式第一行包含一个数n,表示序列长度。第二行包含n个正整数,表示给定的序列。第三个包含一个正整数m,表示询问个数。接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个...原创 2020-02-04 19:50:57 · 179 阅读 · 1 评论 -
生成黑白相间的网格(位运算)
import java.awt.BorderLayout;import java.awt.Color;import java.awt.GridLayout;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;public class MyFrame { private sta...原创 2019-08-12 20:34:22 · 605 阅读 · 0 评论 -
单链表实现法雷序列
法雷序列节点的定义struct FareyListNode { int numerator; // 分子 int denominator; // 分母 FareyListNode *next; FareyListNode(int numerator, int denominator) { this->numerator = numerator; this->de...原创 2019-09-22 21:19:21 · 1632 阅读 · 2 评论 -
自己实现栈和数组和vector
stack.h#pragma oncetemplate<class T>class Stack {public: Stack(); Stack(const Stack<T> &s); ~Stack(); void push(const T& elem); void pop(); const T & top(); size_...原创 2019-09-22 21:39:47 · 123 阅读 · 0 评论 -
vs集成qt实现简单的计算器
可能没有考虑到所有情况,但基本的计算可以做到!Calculator.h#pragma once#include <QtWidgets/QDialog>#include "ui_Calculator.h"#include "calculation.h"#include <QPushButton>#include <QLineEdit>#in...原创 2019-09-22 21:43:16 · 994 阅读 · 0 评论 -
单链表的输出,逆序,排序
ListNode节点的定义template<class T>struct ListNode { T val; ListNode* next; ListNode(T val) { this->val = val; this->next = nullptr; }};链表的几个简单的题目/*从文件中读取链表数据*/template<cl...原创 2019-09-22 21:59:39 · 568 阅读 · 1 评论 -
双栈模拟队列
简单的双栈模拟队列输入栈模拟入队输出栈模拟退队如果退队时输出栈输出栈都为空则说明队列为空,如果输出栈不为空则直接弹栈,如果输入栈不为空输出栈为空就将输入栈内元素全部弹出并压入输出栈,然后输出栈弹栈#include <stack>template<class T>class Queue {public: void enQueue(const T ...原创 2019-09-23 13:03:15 · 277 阅读 · 0 评论 -
双队列模拟栈
两个队列模拟栈只要保证一个栈为空就行入栈直接往不为空的那个队列入队即可出栈时将不为空的队列留下一个,剩下全部入队到另一个队列中,然后弹出剩下的那个元素#include <queue>template<class T>class Stack {public: void push(const T & elem); void pop();...原创 2019-09-23 13:30:16 · 329 阅读 · 0 评论 -
c++单链表实现队列
通过两个链表节点指针实现队列,一个当作队头,一个当作队尾,入队就是往尾节点后插入,退队就是删除头节点template<class T>struct ListNode { T data; ListNode<T> *next; ListNode(const T & data) { this->data = data; this->ne...原创 2019-09-23 19:07:57 · 805 阅读 · 0 评论 -
c++顺序表实现栈
通过capacity控制最大容量,超过就扩容,可以避免多次插入时的扩充操作template<class T>class Stack {public: Stack(); Stack(const size_t & length); Stack(const Stack<T> & s); ~Stack(); void push(const T ...原创 2019-09-23 19:36:12 · 239 阅读 · 0 评论 -
车厢调度问题(队列和栈的实现)
根据队列和栈的性质队列找尾部最大的车厢号栈找尾部最小的车厢号栈、队列、数组可用STL或者自己实现#pragma once#include "vector.h"#include "queue.h"#include "stack.h"#include <fstream>const char* INPUTVECTORFILENAME = "carriagesRe...原创 2019-09-25 19:59:03 · 2877 阅读 · 0 评论 -
TopK算法
需要先在 "testData.txt" 文件里面输入M和N比如2000 10通过最小堆实现TopK最小堆通过数组模拟二叉树来实现#pragma warning(disable:4996)#pragma once#include <fstream>#include <ctime>const char* FILEIN = "testData.txt...原创 2019-09-25 20:01:11 · 1438 阅读 · 1 评论 -
大数加法,减法,乘法
方法:利用string储存一个数字,然后利用加减法的规则进行运算。加法:各数位对齐,然后进行加减,若相加大于’9’则进位。减法:方法同加法,但是要处理被减数与减数的大小问题,所以需要多加一个判断条件。乘法:利用多项式的思想,例如123∗123=123∗1∗102+123∗2∗101+123∗3∗100=12300∗1+1230∗2+123∗3123*123=123*1*10^2+123*2*...原创 2019-01-19 16:43:41 · 237 阅读 · 0 评论