
算法
专注于PAT与leetcode算法方面,企图总结出自己规律未遂的苦逼专栏
妈咪妈咪哄
贪财好色,一身正气。
展开
-
[算法积累] [笔试] [字符串] [11] 3. 无重复字符的最长子串
前言 死尸上线,继续学习。学习使我快乐。 题目链接 无重复字符最长字串 思路 看到第一眼想到的是KMP,第二眼是动态规划。没想到看走眼了。 这是一个典型的滑动窗口问题,就像这样。 下面我们来定义一下这个窗口的规则。 如果Right指向的指针与之前的字符没有重复,则将其右移 如图,就可以Right指针从b移动到c 如果Right 与之前的产生了重复,记录长度。将Left 依次右移直到不包含Right所指向的这个重复字符。如图,Left经过a,b,c 之后才会把前一个c排除在外 重复上面的步骤,如果发现原创 2020-05-17 21:08:11 · 160 阅读 · 0 评论 -
[算法积累] [笔试] [贪心] [10] 求最低满意度
题目 一群人排队,三个属性。pos位置,ai表示第i个人之前的系数,bi表示第i个人之后的系数。 value值是前后求得的和. 思路 居然可以通过对求和公式化简,得到i的位置只与bi与ai的差值有关。直接通过(bi-ai)排序即可。。。。 奇怪的知识又增加了。。。。 ...原创 2020-04-12 20:12:22 · 256 阅读 · 0 评论 -
[算法积累] [leetcode] [字符串] [9] 1410. HTML 实体解析器
前言 参加了周赛,感觉学到的东西不是特别多。下午参加了快手的笔试,明明很简单的,很简单啊啊啊啊啊。卡在第三题,结果其他都没怎么顾,这真的是个坏习惯。每次想着,一定要做出一道完整的题目在考试的时候真的是愚蠢至极。 思路 其实就是替换字符串.在C++中有replace函数。 replace(起始坐标,替换的长度,要替换的字符串) string replaceStr(string &str,st...原创 2020-04-12 19:56:09 · 137 阅读 · 0 评论 -
[算法积累] [leetcode] [字典树] [8] 386. 字典序排数
前言 没想到都已经第8篇了,虽然自己还是那么菜。这个题目跟上面一个440的题目类似.我当时心里还想着,440困难的我都拿下了,还怕你这个中等。结果写了两个小时。。。。。。(弱鸡,呸) 思路 结合440.比440简单,我一直想用440一样的方式去解,但是那个太抽象了。 这个题其实就是一个十叉树的前序遍历。只不过,根节点的值有九种可能,就是1-9. 这里需要注意的就是,由于栈是先进后出,所以需要倒着入...原创 2020-04-10 22:22:38 · 151 阅读 · 0 评论 -
[算法积累] [leetcode] [第k大/字典树] [7] 440.字典序的第k小数字
1.头脑风暴 首先解析题目,第k大元素或者第k小元素的思路应该是: 优先级队列 快排 字典序,能够想到的是: 字典树 其他的头脑风暴: 基数排序 这个题目的思路有点像字典树。字典树是每一个节点下面有26个字符。这个题目是每个节点下面有0-9十个节点。是一个抽象的十叉树. 2.思路 由于是字典序,按位比较,前缀小的放在前面。 因此我们其实只需要找到这个第k个元素到底是在哪个子树下面就可以...原创 2020-04-09 21:51:05 · 609 阅读 · 0 评论 -
[算法积累] [leetcode] [字符串/回溯/动态规划] [6] 22.括号的生成
思路 1.回溯 使用计数器来记录(和)的个数,如果(比n小,就加入一个(.如果)的个数比(的小,就可以加入右括号. class Solution { public: //num表示(的个数 void helper(vector<string>& ans, string& cur, int open, int close, int n){ ...原创 2020-04-09 21:48:14 · 144 阅读 · 0 评论 -
[春招][js][字符串匹配][3] 使用js进行字符串匹配
前言 其实就是正则表达式. 被最近的笔试打击的不行,今天这个明明早上就看过,下午就忘了。。。。。 原题 给出字符串s,匹配串p,求两者是否匹配. eg1. var s = 'abcbc' var s1 = 'ac' var p = 'a(bc)*c' 则s返回false,s1返回true 解答 //就是没有想起来怎么用字符串转..... function f(s,p){ Regex patte...原创 2020-04-03 20:50:48 · 105 阅读 · 0 评论 -
[算法积累] [leetcode] [查找后缀/前缀] [5] 820. 单词的压缩编码
0.前言 写了整整一个上午,从8点50到11点半。我果然还是太菜了。继续加油吧!! 写在这里,方便回顾。 1.思路 本题共有三种思路. 1.1暴力 使用set存储所有的字符串。 之后遍历每个字符串的子串,如果其在set中存在,则将其移除。 unordered_set<string> list(words.begin(),words.end()); for(auto item:lis...原创 2020-03-28 11:48:39 · 152 阅读 · 0 评论 -
[算法积累] [leetcode] [广搜/数学] [4] 365.水壶问题
前言 花了一个半小时,还是没做出来,果然太菜了。说实话,自己还是有点不明白,但是尽力把这个讲清楚把。希望对你有点帮助。 记忆化搜索 将所有的状态添加到队列中,使用广度遍历。这里可以学习的地方就是使用hash值的方式来存储状态,这个我个人感觉是深搜,广搜的福星。几乎可以匹敌dp了。 using PII = pair<int,int>; class Solution { public:...原创 2020-03-21 11:51:34 · 163 阅读 · 0 评论 -
[算法积累] [leetcode] [排序] [3] 求第k大算法 C++
暴力 直接使用sort sort(arr.begin(),arr.end()); 堆/优先级队列 依次弹出即可,这种方法也适合求第k个最大的元素,且要求每个元素都不相同。 int num = 0; vector<int> res(k, 0); //初始化为有k个空间,默认值为0的数组 if(k == 0) return res; priority_queue<int,v...原创 2020-03-20 11:39:41 · 190 阅读 · 0 评论 -
[算法积累] [剑指offer] [位运算] [2] 二进制中1的个数
原题链接 位运算 亮点/所学 对10进制使用-1的操作,最右边的1记为x.使x位为0,使0~x-1位变为1 与自身&运算,将x之后全部变为0 疑惑 如果是负数怎么办? 负数按照补码计算的话,在数值上等于2^k+原来的数,所以不影响结果. 例如-2 补码的十进制就是254 = 256+(-2) 代码 class Solution { public: int Numbe...原创 2020-03-17 21:55:54 · 88 阅读 · 0 评论 -
[算法积累] [剑指offer] [字符串] [1] 替换空格
原题连接 替换空格 亮点/所学 char* 可以通过string的构造函数直接创建,string 转char* 则需要使用strcmp() string find函数,insert函数,erase函数的使用 代码 class Solution { public: void replaceSpace(char *str,int length) { string s(str); ...原创 2020-03-17 21:40:23 · 85 阅读 · 0 评论