• 切蛋糕的最小开销 II

    切蛋糕的最小开销 II(hard) 做题过程 数据量变大了,然后试了一下就改数据类型,做I时用的贪心+优先队列也能过,但表现很差。就是其实不用优先队列也行。 算法概述 原题 本题要求为给出对二维矩阵(蛋糕)不同轴线上横切竖切的代价,要求计算分成1*1的最小代价。一样的贪心,但是不用优先队列。 时间复杂度为O(m×log⁡m+n×log⁡n)O(m \times \log{m} + n...
  • 第430场周赛

    🚀竞赛 使每一列严格递增的最少操作次数 做题过程 一次提交失败,因为之前只考虑了升序的情况。 算法概述 本题要求为将给出二维矩阵中的每一列变为升序,每次操作可对某一列中元素自增一次,计算最少操作次数。直接模拟即可。 时间复杂度为O(n2)O(n^2)O(n2) 空间复杂度为O(1)O(1)O(1) JAVA 1234567891011121314151617181920clas...
  • 图论 --面试经典150题

    被围绕的区域(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⋅log⁡n)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(...
  • 二叉树 --面试经典150题

    相同的树(easy) 做题过程 不太记得了,反正就是选一个遍历方式一个一个比对,DFS或者BFS。 算法概述 原题 本题要求为比较两个树是否相同。 时间复杂度为O(min(n,m)):不一样就是比完一棵较小的树就行 空间复杂度为O(min(n,m)):递归 JAVA 12345678910111213class Solution { public boolean ...
  • 切蛋糕的最小总开销 I

    切蛋糕的最小总开销 I(medium) 做题过程 用贪心+优先队列的思路过了一半的用例,又小修了一下,过了,复杂度上应该优于动态规划的,但是测试用例给出比动态规划慢,不知道为什么。 算法概述 原题 本题要求为给出对二维矩阵(蛋糕)不同轴线上横切竖切的代价,要求计算分成1*1的最小代价。我选择用 贪心+优先队列 。 时间复杂度为O(nlogn+mlogm):遍历每个切法,然后存到堆里...
12348