合集-Leetcode
摘要:题目 朴素解法: 对于每列分别向左右扫描查找左右最高的柱子,对于每一个柱子接的水,那么它能接的水=min(左右两边最高柱子)-当前柱子高度。遍历每列时间复杂度为O(n),每列再扫描O(n),总共O(N^2)。 class Solution { public: int trap(vector<int>
阅读全文
摘要:Problem: 560. 和为 K 的子数组 难点 怎么通过前缀和找到和为k的子数组 如官方题解所言,[j···i]的子数组=k可转化为pre[i]-pre[j-1]==k 要找到前缀和找到和为k的子数组个数就是“找到当前前缀和pre[i]-之前求得的前缀和=k”的总情况。我们通过哈希表记录每个前
阅读全文
摘要:题目描述(难度hard) 给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。 示例: 输入: S = "ADOBECODEBANC", T = "ABC" 输出: "BANC" 说明: 如果 S 中不存这样的子串,则返回空字符串 ""。 如果 S 中存在这样
阅读全文
摘要:思路 每个腐烂橘子向四周感染一次,直到没有新鲜橘子所需的最少时间。其中一定设计图的遍历,那么是DFS还是BFS?因为要求一层层感染完的最少时间,所以用BFS。即把腐烂橘子放入队列,每次感染一波出队,再把新感染的入队,直到所有腐烂橘子都向四周感染过一次。 为了判断是否有橘子永远不会被感染,还要记录一开
阅读全文
摘要:一、堆的基本操作 以大根堆为例 包括——初始化堆、调整堆、插入元素和删除元素 对应时间复杂度为O(n)(自底向上建堆),O(logn),O(logn),O(logn) 插入操作:先将新元素添加到堆的末尾;如果它比父节点更大则交换,直到更小。 删除操作是:把堆顶和堆底元素交换,然后再调整[堆顶,堆底前
阅读全文