🌓

转载的一篇有关学习的文章

原文地址: https://www.zhangxinxu.com/life/2019/03/study/张鑫旭老师真是吾辈前进的灯塔 招聘高峰季,最近面试了一些人,聊到关于学习话题的时候,发现很多人有学不进去,没时间学的问题,加上之前断断续续有很多人咨询我关于如何学习的问题,我觉得可以好好讲讲我对于学习这件事的一些经验和看法。 这些经验与看法不局限于IT...

阅读全文

算法中一些关于质数的概念以及模板整理

首先质数的概念为: 质数(Prime number,又称素数),[1] 指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数 1. 怎么高效判断数n是否为质数?最为暴力的方法便是从2~n-1中逐个遍历得i,判断n%i==0是否成立,如果成立说明n不为质数(如下代码) 1234567bool is_prime(int x)&...

阅读全文

NOI2001 食物链(带权并查集)

先整理一下思路:A吃B,B吃C,C吃A,由此形成以下的环形关系因为会一直循环(即对3取余做条件),我们可以用一个并查集来维护查询他们的身份 想象一个食人族家庭来说明他们之间的关系第1代吃掉第0代,第2代吃掉第1代,第3代吃第2代,第0代会吃掉第3代那么如果有吃掉第3代的第4代,那么他必定与第0代是同一代 采用并查集,维护多一个数组d来表示当前节点到根节点...

阅读全文

剑指 Offer II 067. 最大的异或 (使用Trie树求解)

剑指 Offer II 067. 最大的异或 题目如下: 首先考虑使用朴素算法完成,数据的长度为10^5^,O(n^2^)的复杂度直接爆了,肯定会TL回顾一下Trie树的结构,我们可以将数组里的所有数二进制形式预处理出来一颗字典树 如对于 [3,2,1] 这个序列: 在第一层遍历中,我们首先选择 3 这个数 ,那么序列中什么数与3异或后最大呢? 观察3的...

阅读全文

数组模拟队列与单调队列

队列即是一个特殊的数组,这个数组最前面的元素称为 队头 尾部元素称为 队尾 1234567891011121314151617181920212223242526272829303132#include <iostream>using namespace std;const int N = 100010;int q[N];//[hh, tt] ...

阅读全文

栈的应用——单调栈

我们先考虑暴力做法: 1234567891011121314151617181920212223#include <iostream>using namespace std;const int N = 1e6+10;int arry[N];int main(){ int n; cin>>n; for(int...

阅读全文

数组模拟栈

数组模拟栈 stk[N] 栈; tt表示栈顶所在索引下标(初始时tt=0,表示栈为空) 入栈: ++tt,存入x。 stk[++tt] = x; 出栈: tt– empty: tt<=0时栈为空.top <= 0 ? “empty” : “not empty”; query: 返回栈顶元素 stk[...

阅读全文

使用数组模拟单链表结构

使用数组模拟链表相对于使用结构指针,拥有更高的效率(省去了动态分配内存的环节) c++代码 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647#include <iostream>using namespace std;co...

阅读全文

归并排序笔记,代码模板

归并排序模板归并和 快排 同样属于分治算法 12345678910111213141516171819int tmp[N];void merge_sort(int * p,int l,int r){ //递归的终止条件 if(l>=r) return; //1.确定子问题分界点 int mid = l+r>>...

阅读全文

快排笔记,代码模板

快排属于分治算法,分治算法都有以下几个步骤。 1.分成子问题 -> 2.递归处理子问题 -> 3.合并子问题 快排的步骤分为: 1.确定基准值 x ,可取随机一个元素2.调整区间,使得 [l,x]<=x** , **[x,r]>=x3.递归处理左右区间 12345678910111213141516void q...

阅读全文