• 吃苹果的最大数目

    吃苹果的最大数目(medium)做题过程一开始想的是用堆,但是问题是维护起来总感觉比较麻烦,就觉得可以用dp,但实际上dp无法解决这类前后耦合度较高的问题。 算法概述原题 本题要求为给出下标天数长出的苹果数和它们的保质期,每天最多能吃一个苹果,计算最多能吃多少个。需要使用 贪心 每次从 优先队列 中找到保质期最短的先吃、 时间复杂度为O(nlogn):排序,遍历剩余苹果渐进收敛于排序 空间...
  • 第429场周赛

    🚀竞赛 使数组元素互不相同所需的最少操作次数做题过程第一次没有罚时过了。 算法概述本题要求为每次操作为移除数组中的前三个元素,求为了使数组内元素互不相同需要多少次操作(空数组也算)。直接模拟就完了。 时间复杂度为O(n) 空间复杂度为O(n) JAVA1234567891011class Solution { public int minimumOperations(i...
  • 第146场双周赛

    🚀竞赛 统计符合条件长度为3的子数组数目做题过程滑动窗口即可。 算法概述本题要求为求多少个子数组中第一个和第三个数之和为第二个数的一半。 滑动窗口 秒了。 时间复杂度为O(n) 空间复杂度为O(1) JAVA12345678910111213class Solution { public int countSubarrays(int[] nums) { int l=...
  • 链表 --面试经典150题

    反转链表 II做题过程比反转链表I多了要处理环的问题,但是其实也不需要显式处理,可以用好的代码代替显式处理,这个地方弄得焦头烂额也没弄对。 算法概述原题 本题要求为反转给出范围内的链表。 时间复杂度为O(n) 空间复杂度为O(1) JAVA1234567891011121314151617181920212223242526272829303132333435class Solution...
  • 考场就座

    考场就座(medium)做题过程真的不会,想不到啊。 算法概述原题 本题要求为设计一个类来管理考场座位,使新加入的学生的座位总是远离别人(达到最大距离)。需要使用 优先队列 和 有序集合 来管理座位区间,进而对距离进行计算,还需要使用 延迟删除 同步在删除学生的同时更新队列。 时间复杂度为O(logm):都是对数据结构(有序集合和优先队列/堆的操作) 空间复杂度为O(m):一个学...
  • 栈 --面试经典150题

    简化路径(medium)做题过程思路是对的,主要就是用栈和分类讨论,但是还有熟悉语言特性什么的做的不好。 算法概述原题 本题要求为简化文件路径。用 栈 管理输入的复杂路径。 时间复杂度为O(n) 空间复杂度为O(n) JAVA1234567891011121314151617181920212223242526272829303132333435class Solution {...
  • 将整数按权排序

    将整数按权排序(medium)做题过程按照模拟的思路用哈希表计算步骤并存储,之后自定义比较器进行排序,直接对整理好的列表随机访问即可。 算法概述原题 本题要求为计算每个元素通过一些操作变为1的过程中所需的操作数,并按照升序排列,再返回第k个排序后的元素。可以采用 记忆化搜索 进行剪枝。 时间复杂度为O(c):经过记忆化搜索平摊排序时间,在最坏情况下仍可变为常数级 空间复杂度为O(2):记忆...
  • 区间 --面试经典150题

    汇总区间做题过程主要是怎么处理输出比较麻烦,本身没有什么算法。 算法概述原题 本题要求为将给出的整数数组汇总为一些连续区间。只需要一次遍历即可。 时间复杂度为O(n) 空间复杂度为O(1) JAVA12345678910111213141516171819202122232425262728class Solution { public List<String>...
  • 根据第K场考试的分数排序

    根据第K场考试的分数排序(medium)做题过程感觉就是模拟,想不到可以用语言特性。 算法概述原题 本题要求为对一个二维矩阵中的某一列进行排序。 复杂度根据语言 JAVA1234567class Solution { public int[][] sortTheStudents(int[][] score, int k) { // 返回正值,第一个...
123458