![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法与数据结构
文章平均质量分 60
南象
这个作者很懒,什么都没留下…
展开
-
统计数组中不同元素出现的次数
这里写自定义目录标题字节题目思路代码实现字节题目有一个正整数数组A[N]每个元取值范围[1,N],统计每个元素出现次数。要求:时间负责度O(n),空间复杂度O(1)输入1 3 2 5 3 1输出1=>22=>13=>25=>1思路常规思路是利用map进行统计,但不满足时间和空间复杂度的要求;正确思路:遍历数组,通过当前元素的值a作为下标,找到下一个元素。最后得到的数组中,下标(因为数组的下标都是从0开始的,所以需要+1)为数组中出现的元素,每个下标对应原创 2021-08-07 23:44:52 · 3843 阅读 · 2 评论 -
字符串匹配-KMP
这里写自定义目录标题KMP算法KMP算法一直以来对于字符串匹配使用的都是两个循环的方式,了解到KMP算法后,也曾手抄写过这种O(n)的匹配算法,但是理解不深刻,为了怕忘记。在此总结一下:KMP算法主要用来进行字符串匹配,其中的关键在于求前缀表,或者叫next数组、prefix数组。视频讲解了如何手动求next数组;在实际编码中为了方便,,实现时经常将 j-表示前缀尾和最长相同前后缀初值设置为-1,i表示后缀尾初值设置为1。具体编码过程 void getNext(int* next,const原创 2021-01-14 22:48:47 · 90 阅读 · 0 评论 -
LeetCode151.翻转字符串里的单词—双指针的应用
思路:移除多余空格将整个字符串反转将每个单词反转最初的思路很容易写出因为erase本身就是O(n)的操作,再加上外面嵌套了一个for循环,那么整体的时间复杂度就变为O(n^2).若考虑双指针发来移除空格,最后resize字符串的大小,可达到O(n)的时间复杂度。class Solution {public: //反转字符串中s中左闭右闭的区间[start,end] void reverse(string& s, int start, int end) { .原创 2021-01-09 13:53:23 · 134 阅读 · 0 评论 -
「动态规划」 — 高楼扔鸡蛋
题目你面前有一栋从 1 到N共N层的楼,然后给你K个鸡蛋(K至少为 1)。现在确定这栋楼存在楼层 0 <= F <= N,在这层楼将鸡蛋扔下去,鸡蛋恰好没摔碎(高于F的楼层都会碎,低于F的楼层都不会碎)。现在问你,最坏情况下,你至少要扔几次鸡蛋,才能确定这个楼层F呢?动态规划思路:指把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系(状态转移方程),逐个求解。直接套用框架:明确这一问题有什么「状态」和「选择」。opt :指代特殊的计算逻辑,通常为 max or min。i,原创 2020-09-15 20:01:28 · 212 阅读 · 0 评论 -
Leetcode 本地调试环境(C++)
刷题时,经常需要本地调试,特此整理一下如何依照 LeetCode 的样式,输入测试用例以及打印结果,增强结果的可视性。二叉树利用数组生成二叉树,这里以LeetCode第102题层序遍历为例:工具函数TreeNode *ConstructBinaryTree(vector<int>& vec, int len, int i){ if (vec.empty() || len < 1) return nullptr; TreeNode *root = NUL原创 2020-12-31 11:20:30 · 2187 阅读 · 1 评论