数据结构与算法
文章平均质量分 55
cyrilwong947
这个作者很懒,什么都没留下…
展开
-
Leetcode - 滑动窗口 - 高频06 - 1052. 爱生气的书店老板
思路:读完题目一定要搞清楚要求的东西是需要怎么组成,最大的满意度 = 老板不生气的时间点的满意度总和(也就是grumpy[i] == 0的所有位置的满意度) + 在window时间内生气的老板会导致流失的最多满意度。统计不生气时间点满意度总和很容易再利用滑动窗口计算老板生气时刻grumpy[i] == 1,窗口内最大的满意度是多少,稍微比滑动窗口最大值更简单一点。class Solution { public int maxSatisfied(int[] customers, int[]原创 2021-04-11 20:00:52 · 169 阅读 · 0 评论 -
Leetcode - 滑动窗口 - 高频03 - 剑指 Offer 48. 最长不含重复字符的子字符串
这题目是简化版的最小覆盖子串 ,基本上思路是一致的,右指针移动,根据右指针碰到的情况来考虑是否移动左指针和计算结果。二刷最小覆盖子串的时候会写一下blog。class Solution { public int lengthOfLongestSubstring(String s) { char[] map = new char[128]; // current char in the window int count = 0; /原创 2021-04-01 13:22:03 · 115 阅读 · 0 评论 -
Leetcode滑动窗口系列-3. 无重复字符的最长子串
Summary滑动窗口还是需要练习个10道题目才比较容易上手。我的思路我的滑动思路:举例abcbb,先说过程,开始left指针为0,右指针也为0,右指针不断右移,直到右指针遇到HashSet中有重复的字符,沿途遇到的所有char都加入HashSet。abc会进入HashSet遇到右指针遇到的相同的char是b,那么在去除重复元素和添加新的b之前,就需要结算一下。结算后,那么就让左指针一直滑动直到HashSet不包含b,也就是滑动到c的位置,再继续右指针滑动。class Solution {原创 2021-03-29 10:48:28 · 114 阅读 · 0 评论 -
2021-2月刷题打卡
Sunday14 Feb 202101-递归实现二叉树遍历-这个挺简单的,主要是感受递归的思想02-非递归实现二叉树遍历中序遍历很值得重新做一次,有个小坑吧。后序遍历就是两个stack的方式,利用头右左逆序。还有一个只用一个stack的方式来遍历,值得再看看。...原创 2021-02-14 21:47:42 · 187 阅读 · 0 评论 -
算法知识点-排序算法总结
排序算法总结原创 2021-01-20 20:26:55 · 333 阅读 · 2 评论 -
算法知识点-排序-桶排序
Notes:在面试过程中,除非明显声明,一般时间复杂度都是基于比较的排序。桶排序桶排序是一种排序的思想,它指的是不基于比较的排序,而是利用桶来完成排序的工作,之前介绍的冒泡,选择,插入,快排,堆排序都是基于比较的排序。桶排序有很多种实现,包括计数排序,基数排序等,时间复杂度为O(N)O(N)O(N),额外空间复杂度为O(M)O(M)O(M),空间复杂度具体取决于桶排序的实现方式。尽管桶排序在时间复杂度上看似很优秀,可以达到O(N)O(N)O(N),但是应用范围很有限,需要样本的数据状况满足桶的划分。原创 2021-01-20 20:01:34 · 252 阅读 · 0 评论 -
算法知识点—前缀树
为什么要有前缀树查询一个字符串是否在一个字符串数组出现多少次,可以使用哈希表保存字符串。但是如果想要查询以he开头的字符串有多少个的时候,哈希表是不支持这样的查询的。如果使用暴力方法,直接对字符串数组中每个字符串进行遍历,时间复杂度会达到O(N∗K)O(N * K)O(N∗K),K为前缀长度。看似这个还是可以接受的,毕竟O(N)O(N)O(N)的时间复杂度本身已经挺小的,但是前缀树可以让时间复杂度接近常数O(K)O(K)O(K)。那么下面就介绍一下什么是前缀树,如何建立(插入)前缀树,如何查询某个字原创 2021-01-18 19:59:33 · 1142 阅读 · 0 评论