04 2020 档案
摘要:双指针思想,i为慢指针,指向当前子串开始位置,j为快指针,指向当前判断的字符idx[s[j]]记录字符s[j]上次出现的位置每次迭代记录字符出现位置当字符s[j]上次出现的位置大于当前子串开始位置i时,比较当前子串长度与目前为止所有子串最大长度,取最大,同时将开始位置设为字符s[j]上次出现位置的下
阅读全文
摘要:1.缺失的第一个正数 要求时间复杂度应为O(n),空间复杂度为常数。 方法一:哈希表(空间复杂度不符合要求)按照刚才我们读例子的思路,其实我们只需从最小的正整数 11 开始,依次判断 22、 33 、44 直到数组的长度 N 是否在数组中。 如果当前考虑的数不在这个数组中,我们就找到了这个缺失的最小
阅读全文
摘要:二叉树的前序遍历 class Solution { vector<int> a; public: vector<int> inorderTraversal(TreeNode* root) { d(root); return a; } void d(TreeNode* x) { if(x==NULL)
阅读全文
摘要:双指针思想,i为慢指针,指向当前子串开始位置,j为快指针,指向当前判断的字符idx[s[j]]记录字符s[j]上次出现的位置每次迭代记录字符出现位置当字符s[j]上次出现的位置大于当前子串开始位置i时,比较当前子串长度与目前为止所有子串最大长度,取最大,同时将开始位置设为字符s[j]上次出现位置的下
阅读全文
摘要:方法一: 一次遍历直觉 本问题被称为 荷兰国旗问题,最初由 Edsger W. Dijkstra提出。其主要思想是给每个数字设定一种颜色,并按照荷兰国旗颜色的顺序进行调整。 我们用三个指针(p0, p2 和curr)来分别追踪0的最右边界,2的最左边界和当前考虑的元素。 本解法的思路是沿着数组移动
阅读全文
摘要:今天就来聊三道考察频率高,而且容易让人搞混的算法问题,分别是求子集(subset),求排列(permutation),求组合(combination)。这几个问题都可以用回溯算法解决。 一、子集问题很简单,输入一个不包含重复数字的数组,要求算法输出这些数字的所有子集。 vector<vector<i
阅读全文
摘要:45. 跳跃游戏 II 难度困难430 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 示例: 输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2。 从下
阅读全文
摘要:a + b 的问题拆分为 (a 和 b 的无进位结果) + (a 和 b 的进位结果) 1. 无进位加法使用异或运算计算得出2. 进位结果使用与运算和移位运算计算得出3. 循环此过程,直到进位为 0 class Solution { public int getSum(int a, int b) {
阅读全文
摘要:120. 三角形最小路径和 难度中等365 给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] 自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。 说明:
阅读全文
摘要:给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次 public: ListNode* deleteDuplicates(ListNode* head) { struct ListNode* p=head; while(p!=NULL&&p->next!=NULL) { if(p->val
阅读全文
摘要:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 示例 1: 输入: [1,3,5,6], 5输出: 2示例 2: 输入: [1,3,5,6], 2输出: 1示例 3: 输入: [1,3,5,6],
阅读全文
摘要:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 方法一:双指针思路 既然问题要求我们就
阅读全文
摘要:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 class Solution { public: vector<vector<int> > t
阅读全文
摘要:1.应用于查找的find()函数 #include<iostream>#include<string>using namespace std;int main(){ string str; cin>>str; cout<<"ab在str中的位置:"<<str.find("ab")<<endl; //
阅读全文
摘要:一、逻辑运算符 &&(短路与)特点:只要碰到了false或者等价于false的就短路,只要短路了就不会继续往后执行了。如果短路了,得到造成短路的这个值,如果不短路,得到的是第二个值 console.log( true && true ); // trueconsole.log( 123 && '中国
阅读全文
摘要:一个4X7的方格形棋盘,要给它的每个方格涂色:颜色或黑或白。试证明:对于任何一种涂色方式,总有一个矩形,其顶点所在的四格同色。 A B 不妨让图A为所述棋盘,从上到下为第1 - 4 行,从左到右为第1 - 7列。易知:任意一行至少有4个方格的颜色相同;至少存在两行满足:这两行占多数的颜色相同。 不妨
阅读全文
摘要:从等差数列1 4 7 10 ··· 100中任取20个不同数,求证其中存在两个不同数,其和为104 这个数列一共有34个元素。满足和为104的数对为4 100、7 97、10 94、···· 49 55,共16对,只要选出的数中包含这16对中的其中1对,那么就满足题意了。而因为选了20个数,20-2
阅读全文
摘要:一个集合由小于100的26个奇数组成,且其中没有任何一对数的和为102,求这样的集合共有多少个 小于100的奇数为1 3 5 ···· 49 51 53 ···· 97 99。只有3 99、5 97、····49 53这24组数之和是102。所以要想没有任何一对数为102,这24对数中每对最多只能选
阅读全文
摘要:大厅中聚集着100位客人,其中任何一个人至少认识67个人,试证明这些客人中一定可找到四人,他们之中任何两人彼此认识, 随便挑一个人出来,将其命名为A,任选其认识的一个人,将其命名为B,因为任何一个人至少认识67个人,所以肯定有34个人是AB共同认识的(67-1-(100-1-67)=34),。从这3
阅读全文
摘要:1 二维向量/点、计算几何基础 const double eps = 1e-8; #define lt(x, y) ((x) < (y) - eps) #define gt(x, y) ((x) > (y) + eps) #define le(x, y) ((x) <= (y) + eps) #de
阅读全文
摘要:1 IO 优化 #define ID isdigit(c = *next++) #define IS isspace(c = *next++) struct Istream { int size; char *next, buf[20030731]; Istream & init(FILE *f =
阅读全文
摘要:1 并查集 (不封装,按秩合并) int ancestor(int x) {return p[x] == x ? x : (p[x] = ancestor(p[x]));} bool test(int x, int y, bool un = false) { if ((x = ancestor(x)
阅读全文
摘要:1 双向邻接表 inline void addedge(int u, int v) { to[++E] = v, next[E] = first[u], first[u] = E; to[++E] = u, next[E] = first[v], first[v] = E; } 2 有向图的强连通分
阅读全文
摘要:1 深度优先搜索 (dfs,大法师) // implementation 1 void dfs(int x){ int i, y; // do something for(i = first[x]; i; i = next[i]) if((y = to[i]) != p[x]){ p[y] = x;
阅读全文
摘要:1 字符串 Hash const ll mod[3] = {900000011, 998244353, 1000000007}; const ll bas[3] = {4493, 8111, 8527}; // you can choose your bases and modulos char s
阅读全文
摘要:1 最大公约数 (gcd) int gcd(int a, int b) {return b ? gcd(b, a % b) : a;} 2 快速幂 (递归版本) ll PowerMod(ll a, ll n, ll m = mod) { if (!n || a == 1) return 1ll; l
阅读全文
摘要:一个棋盘放棋子的问题 从8n*8n(n是正整数)方格棋盘上选出16n格,使每行每列含有其中的两格,证明:可以把16n个格子,(8n白8n黑)放置在所选的方格上,使每行每列都恰好有一个白的和一个黑的棋子。 解答: 如果每行每列都恰好有一个白的和一个黑的棋子,易知交换某两行/列后每行每列还是恰有一个白的
阅读全文
摘要:题目描述 长江游艇俱乐部在长江上设置了 nn 个游艇出租站 1,2,\cdots,n1,2,⋯,n。游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站 ii 到游艇出租站 jj 之间的租金为 r(i,j)r(i,j)(1\le i\lt j\le n1≤i<j≤n)。试
阅读全文
摘要:#include <cstdio> #include <cstring> bool isPrime[100000010]; //isPrime[i] == 1表示:i是素数 int Prime[5000010], cnt = 0; //Prime存质数 void GetPrime(int n)//筛
阅读全文
摘要:C++队列queue模板类的定义在<queue>头文件中,queue 模板类需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的。C++队列queue是一种容器适配器,它给予程序员一种先进先出(FIFO)的数据结构。 C++队列Queue类成员函数如下: back()返
阅读全文
摘要:题目描述 超市里有 n(n\le10^5)n(n≤105) 个寄包柜。每个寄包柜格子数量不一,第 ii 个寄包柜有 a_i(a_i\le10^5)ai(ai≤105) 个格子,不过我们并不知道各个 a_iai 的值。对于每个寄包柜,格子编号从 1 开始,一直到 a_iai。现在有 q(q\l
阅读全文
摘要:BST(Binary Search Tree),二叉搜索树,又叫二叉排序树 是一棵空树或具有以下几种性质的树: 若左子树不空,则左子树上所有结点的值均小于它的根结点的值 若右子树不空,则右子树上所有结点的值均大于它的根结点的值 左、右子树也分别为二叉排序树 没有权值相等的结点。 看到第4条,我们会有
阅读全文

浙公网安备 33010602011771号