切蛋糕的最小开销 II(hard)
做题过程
数据量变大了,然后试了一下就改数据类型,做I时用的贪心+优先队列也能过,但表现很差。就是其实不用优先队列也行。
算法概述
原题
本题要求为给出对二维矩阵(蛋糕)不同轴线上横切竖切的代价,要求计算分成1*1的最小代价。一样的贪心,但是不用优先队列。
时间复杂度为O(m×logm+n×logn)O(m \times \log{m} + n...
🚀竞赛
使每一列严格递增的最少操作次数
做题过程
一次提交失败,因为之前只考虑了升序的情况。
算法概述
本题要求为将给出二维矩阵中的每一列变为升序,每次操作可对某一列中元素自增一次,计算最少操作次数。直接模拟即可。
时间复杂度为O(n2)O(n^2)O(n2)
空间复杂度为O(1)O(1)O(1)
JAVA
1234567891011121314151617181920clas...
被围绕的区域(medium)
做题过程
大概清楚肯定还是DFS和BFS都可以,但问题是该怎么组织代码结构,完全没有思路。而且抄都能抄错好几次。
算法概述
原题
本题要求为给出二维矩阵,需要通过原地操作将其中被’X’完全包围的’O’转换为’X’(在边界不算)。DFS看上去好写一些。
时间复杂度为O(n*m)
空间复杂度为O(n*m)
JAVA
1234567891011121314...
二叉树中的链表(medium)
做题过程
DFS很容易写,但是后面又陷入了分类讨论的思维怪圈,最后又得到了必须要用回溯的结论,实际上从头开始回溯就是枚举了。
算法概述
原题
本题要求为给出一棵树和一个链表,判断树中是否有与链表相同的路径。使用DFS进行枚举。
时间复杂度为O(n⋅min(2len+1,n))O(n \cdot \min(2^{\text{len}+1}, n))O(...
通过投票对团队排名(medium)
做题过程
感觉又要用堆又要用哈希表的很麻烦,没想到简便思路。
算法概述
原题
本题要求为给出字符串数组用于表示投票结果,然后根据字符串中的名次以及该名次的出现次数决定最终结果。使用 哈希表 存储每个排名对象的名次。
时间复杂度为O(N⋅K+N2⋅logn)O(N \cdot K + N^2 \cdot \log n)O(N⋅K+N2⋅logn):...
分割数组(easy)
做题过程
哈希表,很直接,但是又用到了不必要的Map.Entry<>和Map.entrySet(),其实不用。
算法概述
原题
本题要求为判断数组(偶数长度)是否能被分为两个不含重复元素的数组。用 哈希表 存储每个数字的出现频次即可。
时间复杂度为O(n)
空间复杂度为O(n)
JAVA
12345678910111213class Soluti...
查询数组中元素的出现位置(medium)
做题过程
easy
算法概述
原题
本题要求为给定一个数据数组和一个查询数组,以及一个查询值,根据查询数组返回数据数组中的不同序号的下标。
时间复杂度为O(n+q)
空间复杂度为O(n):最坏
JAVA
123456789101112131415class Solution { public int[] occurrenc...
字符串及其反转中是否存在同一字符串(easy)
做题过程
用哈希表,和两数之和一个思路。
算法概述
原题
本题要求为如题所示。
时间复杂度为O(n)
空间复杂度为O(n)
JAVA
12345678910111213141516171819202122232425class Solution { public boolean isSubstringPresent(...
相同的树(easy)
做题过程
不太记得了,反正就是选一个遍历方式一个一个比对,DFS或者BFS。
算法概述
原题
本题要求为比较两个树是否相同。
时间复杂度为O(min(n,m)):不一样就是比完一棵较小的树就行
空间复杂度为O(min(n,m)):递归
JAVA
12345678910111213class Solution { public boolean ...
切蛋糕的最小总开销 I(medium)
做题过程
用贪心+优先队列的思路过了一半的用例,又小修了一下,过了,复杂度上应该优于动态规划的,但是测试用例给出比动态规划慢,不知道为什么。
算法概述
原题
本题要求为给出对二维矩阵(蛋糕)不同轴线上横切竖切的代价,要求计算分成1*1的最小代价。我选择用 贪心+优先队列 。
时间复杂度为O(nlogn+mlogm):遍历每个切法,然后存到堆里...