自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Uva 11181/条件概率

题目链接:https://vjudge.net/problem/UVA-11181设Ei为第i个人购买了产品,E为有r个人购买了。条件概率公式:P(Ei | E) = P(Ei E) / P(E)然后全排列算出所有r个人购买的概率累加就是分母,分子就是第i个人购买的时候概率累加,因此我们只需要设置一个数组,记录哪些分支里第i个人是否购买,然后到最后的时候判断一下,把第i个人购买的情况的概率做个累加就是分子了。#include<cstdio>#include<cstring&.

2020-05-30 18:58:46 160

原创 LeetCode 974/前缀和/哈希表/取模和取余

子数组串 -> 暴力+前缀和 -> TLE同余定理:这里使用同余定理:(a-b)/m为整数 -> a与b对模m同余对模m同余:当两个整数除以同一个正整数n,若得相同余数(正数),则…所以(pre[j]-pre[i - 1])modK==0 -> pre[j] mod K == pre[i - 1] mod K这样我们就不用管i的位置了,只要统计pre[i - 1] mod K这个结果在前面已经遍历过程中出现了几次就可以了,自然想到实现一个字典(以取模的结果为key,valu..

2020-05-27 13:44:26 371

原创 LRU/LeetCode 146

题目链接:https://leetcode-cn.com/problems/lru-cache/快速查找到这个元素不难想到:哈希表。关键是如何再设计一个数据结构去O(1)删除和插入,这样子的话很明显必须是个线性结构了(链表、栈、队列(这俩个只能在头尾)等),但是发现我们可能需要在线性结构中间删除某个元素(当key相同的时候,我们需要更新value),假如不会出现相同值的情况也只能用deque(因为头尾都需要可以进行操作),所以我们在这里选择链表。那么就很好办了,哈希映射链表中的位置(迭代器),因为

2020-05-25 16:25:04 138

原创 前序遍历/二叉树/LeetCode 5418

题目链接:https://leetcode-cn.com/problems/pseudo-palindromic-paths-in-a-binary-tree/要想排列成为回文,那么这个路径上出现过奇数次的数不能超过1个,不然无法构成回文。第一个想法,用一个集合在树上记录,如果集合出现了root->val,那么就erase,否则insert,这样到最后如果集合里的元素大于1个,说明不止一个数出现了偶数次。注意题目的细节:结点的值是从1~9,我们可以直接设置1至9的计数器,而不用选择集合。.

2020-05-24 14:22:12 77

原创 LeetCode 76/滑动窗口/双指针

设置两个字典(哈希表实现),因为这里相同字符可能出现多次,而s的子串必须出现同样多次的t中出现过的字符。总体思路:1.先不断移动右指针,当window里出现了全部need里的字符的时候(覆盖了t时)。2.这个时候开始不断移动左指针,同时更新最短窗口的起点和长度。一旦window里某个字符比need要少了,停止移动左指针,改为移动右指针。(因为答案可能是交叠出现的)class Solution {public: string minWindow(string s, string t) ..

2020-05-23 12:34:12 163

原创 位运算/LeetCode 260/LeetCode 136

题目链接:https://leetcode-cn.com/problems/single-number/TC:O(n),MC:O(1) 如此一来,暴力和利用哈希表(最坏情况是前面n/2都是出现了两次的数,这样所需要开辟的内存空间还是达到了O(n)级别)都不可以了。题目中有个信息很重要:n-1个数都出现了两次,联系到位运算中的异或:a^a=0,0^a=a,并且a^b^a=(a^a)^b=0^b=b,位运算是满足交换律和结合律的,自然题目就解决了,一开始用0去异或每一个数,这样最后异或完的必定是只出现一.

2020-05-22 12:30:12 155

原创 前序/中序遍历/树的重建/LeetCode 105

题目链接:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/首先,要明白preorder和inorder的关系,preorder中的第一个往往是那颗(子)树的根节点,在inorder中就可以把序列分为左右两半(左树、右树)。这里选择前序遍历构造树:也就是先构造根节点,再构造左子树和右子树。如何构造:首先我们知道preorder的第一个就是根节点,而不知道下一个结点究竟.

2020-05-22 10:58:03 96

原创 动态规划/LeetCode 5

递推顺序:dp(i+1,j-1) -> dp(i,j) ,也就是说当右下标枚举到j-1的时候,i+1的状态必须更新过,所以要把i放在里层循环。正着推的时候,j肯定在j-1后面更新。class Solution {public: string longestPalindrome(string s) { string ans; int n = s.size(); if(n < 2) return s; vector&l..

2020-05-21 23:42:38 145

原创 状态压缩/LeetCode 1371

暴力枚举起点i和终点j,同时还要预处理做前缀和,用pre(i,k)表示前i个字符第k个元音字符出现的次数。TC:O(n2),TLE。解题关键在于偶数次,我们需要知道一个前提事实:偶数-偶数=偶数,奇数-奇数=偶数。也就是说当我们遍历到第j个字符时,这时五个元音的奇偶出现次数为一个状态,假如遍历到i个字符(i < j),这时五个元音的奇偶出现次数和第j个是一样的话,j-i就是满足题意的一个子串的长度(所有元音都出现过偶数次)。也就是说我们要记录遍历到每个字符时,前面的所有元音的状态。然后不断更新..

2020-05-20 23:32:17 327

原创 拓扑排序/LeetCode 210

bfs利用入度来进行访问,将所有入度为0的都push进队列,因为那都有可能是起点。利用入度:class Solution {private: // 存储有向图 vector<vector<int>> edges; // 存储每个节点的入度 vector<int> indeg; // 存储答案 vector<int> result;public: vector<int> fin.

2020-05-17 15:27:01 166

原创 char和int

char本身其实就是一定范围的int,有符号范围为:-128~128,当我们给一个字符c赋值的时候,其实是把那个字符的对应的ASCII码给了那个变量。所以我们对char做位运算的时候,和对int做位运算一样的,都是转化为2进制,因为char也其实存的就是个十进制的数。char c = '2';//是把2的ASCII(10进制)码赋给了cchar c = 2; //是把ASCII码2给了cint main(void){ char a = 50; //储存了个ASCII码 pr.

2020-05-14 21:33:25 879

原创 多阶段决策/动态规划/Uva 116

回溯法中,每做一次决策,都会生成对于一个当前节点产生一颗子树,结点的层数就是“下一个待填充位置”cur。 ——刘佳汝dp不过就是回溯的返回值用一个表存储起来了,在这里每列都是解答树的一层,每层都要做出决策,而决策就是从前一列可移动过来的格子。很明显,dp(i,j)设为状态,代表(i,j)最小的转移cost。转移方程就是从可移动的三个位置取最小值,然后加上当前格子的cost。要注意的是:这题是环形矩阵,细节看代码。#include<iostream>#include<cs..

2020-05-08 23:28:09 164

原创 动态规划/最优子结构/LeetCode 221/LeetCode 1277

LeetCode 221 传送门这题,最开始想用搜索/暴力做,尝试过后,感觉实在麻烦。这题,关键还是要看出最优子结构,从而使用动态规划。每个为1的小方块,要想和大方块合并成为一个更大的方块,只能从 以左上、上方、左边的小方块为右下角的大方块那转移过来,而且只能从这四个里面选一个最小的,不然的话,无法保证其他两个边都有。定义状态:dp[i][j] 以 matrix[i][j] 为右下角的正方形的最大边长。(定义成面积虽然更直观,但是转移的时候很麻烦,要开更号求边长)递推方程:dp(i,j) = m.

2020-05-08 23:04:46 133

原创 泰勒展开式

一句话概括泰勒展开式:用多项式去无限逼近一个函数,就是将某个函数在一个点上泰勒展开。如何推导?不用管,记住公式就行了。蕴含的思想:某个点的变化掌握在一阶导数里,一阶导数的变化在二阶导数里,往后类推。为什么需要展开?(泰勒展开有什么用?)1.方便求一些函数值,因为泰勒展开是多项式,而多项式的值一般都很好求,只要代入变量,就可求出因变量。而很多函数的函数值很难求,例如si...

2020-05-08 17:00:37 1175

原创 LeetCode 572/前序遍历

主体思路就是,前序遍历这颗树,遇到值相同的,用另一个函数判断是否完全一致,不完全一致继续遍历(因为后面可能才出现子树相同的结构),否则返回true。判断函数,很多细节见代码。class Solution {public: bool isSubtree(TreeNode* s, TreeNode* t) { if(s == NULL) return false;...

2020-05-07 23:38:03 100

原创 递推/前缀和/Uva 12627

这题需要发现前一个时间段的图会成为后一个时间段的左上、右上、左下部分,而右下全是蓝色。假如题目需要的是在2k-1行前面的气球数,直接用上一张图这么多行的气球数×2就可以了。而如果需要2k-1行后面的,就需要上一张图里的前i-2k-1的,因为后面一张图的后半部分的气球数和以前一张图的是一样的(右下角都是蓝色)。这题还需要用到前缀和的思想,r1~r2的气球数,就用f(k,r2)-f(k,r1-...

2020-05-07 23:32:05 120

原创 使最大值最小化/Uva 714/二分/贪心

按照题目意思,我们需要找一个x,使得每组被分到的书的总页数都小于x,且这个x得最小。很明显,这个x的范围是:max~sum之间的,我们只需要从小到大枚举这么多数字,然后让检验是否满足前面一个条件即可。但是,分组的时候一定是贪心的分,即每个组被分到的书的总页数都尽量要贴近x,这样x才有可能是最小的,当需要的抄写员过多的时候,x一定小了,一定要抄写员等于所给的k的第一个x就是答案。降低时间复杂...

2020-05-07 23:17:59 236

原创 LeetCode 983最低票价/记忆化搜索/动态规划

此题来自:https://leetcode-cn.com/problems/minimum-cost-for-tickets/这道题刚开始打算用所给的天数直接搜索,即每一个要乘车的天数,都穷举选票策略,然后保留一个参数当作这个票的期限(剩下多少天可以继续乘车)。换个思路,当前第i天买哪个票最划算取决于买个这个票后的i+1/i+7/i+30天之后继续花的钱最少(这是一个贪心策略,很明显如果买了...

2020-05-06 12:17:26 182

原创 概率/离散型分布/连续型分布/概率密度函数

算概率首先要明确数据类型,因为数据类型会影响求概率的方式。数据类型分为:1.离散型随机变量 2.连续型随机变量离散型随机变量的取值为有限个或者无限可列个(整数集是典型的无限可列),这个算概率的时候很简单,即随机变量取某个值的时候,概率对应多少。连续型随机变量的取值为无限不可列个(实数集是典型的无限不可列)这个时候我们讨论概率就需要用到面积,因为取值既然是无限个,那么讨论某个点的概率...

2020-05-05 16:13:41 6022

原创 LeetCode 98.验证二叉搜索树

此题来自:https://leetcode-cn.com/problems/validate-binary-search-tree/submissions/二叉搜索树的主要特征就是:中序遍历元素有序。两种思路:将整个树中序遍历一遍,把所有元素都储存下来,然后再线性扫一遍这个数组,看是否满足有序条件。TC:O(n),MC:O(n)。想办法优化空间损耗,那就是边中序遍历边判断,中序遍历时每个...

2020-05-05 14:03:53 90

原创 滑动窗口/单调队列/双指针

滑动窗口(双指针)的思路,一般用在某个连续的子序列/子数组里寻求某个满足答案的状态。例题1:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/很明显也需要用到滑动窗口的思想,当不断往右拓展连续可能序列的时候,需要看窗口内是否含有同样的字符,所以关键是判重,那在这里直接用个集合保存窗口...

2020-05-04 19:08:33 201

原创 LeetCode 25双周赛

双周赛地址2https://leetcode-cn.com/problems/max-difference-you-can-get-from-changing-an-integer/这题数据量很小,一共也就8个数字(8位数),其实不用贪心(贪心要讨论很多情况),直接暴力枚举就可以了,a和b分别从0枚举至9,然后扫一下每位数字,只要等于a的全换成b。然后时时更新max和min就好了,注意讨...

2020-05-03 23:27:13 194

原创 微积分由来详解

本文参考:https://www.zhihu.com/question/336322284/answer/9180675371.求曲线面积求图形面积这么多,不可能每次都记得公式,况且很多都还没有公式。所以,人们想到一种穷竭法:2.初见积分面积就是无穷小量dx(宽)×函数值(纵坐标/高)3.直线和斜率直线的斜率就是表明直接的倾斜程度的,纵坐标之差Δy和横坐标之差Δx的比值(Δy/Δx)...

2020-05-03 18:13:12 4367

空空如也

空空如也

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

TA关注的人

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