- 博客(10)
- 收藏
- 关注
原创 力扣 面试经典150题 堆
不必完全排序完成,通过快排找到一个元素的正确位置后,分为前半部分和后半部分,在此基础上可以排除一部分的元素。如果不采用随机选择的枢轴元素的话,极可能导致遇到最坏情况,所以最好每次选择枢轴元素是采用随机选择。构建堆——O(klogk),遍历剩余元素,并完成堆的更新O(n*logk),注意这里的k可以视作常数,所以总体还是O(n),但当k也很大时(最坏情况),复杂度会靠近 O(nlogn)。维护一个大小为k的小根堆,每当发现比堆顶大的元素,就将这个较大元素与堆顶交换,执行重排,最后保留在堆顶的元素就是第k大。
2025-10-26 15:42:30
303
原创 力扣 面试经典150题 二分查找
在二分寻找所在行时,会与上一题有所不同,寻找答案所在行需要额外的一个元素存储最新的合法的mid,因为找所在行本质上是在找target的最近的左边界,所以我们需要一个latest变量记录最新的合法的左边界。可能的疑问:为什么没找到目标时,插入位置设定在left?虽然通过本题,但仍然没有满足O(logn)的要求。找到第一个出现下降趋势前的那个元素的下标即可。
2025-10-23 23:57:35
253
原创 力扣 面试经典150题 多维动态规划
实际上由于我们只关心最短路径的长度,所以我们不必非要按照题目的实际移动方向来进行DP,也就是说我们可以从三角形的底边向顶点移动(进行dp),这样得到的最小路径长度就会直接保存在顶点中。也就能够节省掉最后一行的遍历,同时i>j的部分我们也能做到不必关心其初值大小,即不必考虑边界问题。本代码中ans的得出还需要遍历最后一行,有些繁琐。
2025-10-13 14:10:20
140
原创 力扣 面试经典150题 位运算
虽然^是二进制的运算方式,但是以上性质同样可以推广到十进制,因为实际上,x的二进制表示本就唯一,两个相同的二进制数异或后,必定为0;于0异或同理,同0保持0,1^0仍是1。线性时间,但常数空间,不可以哈希,只能位运算。性质:x^0 == x;
2025-10-11 22:14:04
146
原创 力扣 面试经典150题 数组 / 字符串
同26,只不过判定的间隔从2起步,即新数组的倒数第二个元素(slow-2所指内容,slow是新数组尾待插入元素的位置)与fast所指内容比较,并在此基础上,额外考虑数组长度不足2的情况即可。此方法与80题的思路1类似,但因为需要先重排数组,并且还要一个一个元素计数并判定,所以总体而言效率较低,且没有利用上题目的多数元素特性,仍有改进空间。两数组的首位设置指针,指针指向的元素拉出来进行比较,较小者压入新数组,并让较小者对应的指针后移,依此循环,直到所有元素都已遍历。重排后,直接取数组的中位数为结果。
2025-09-14 17:50:03
213
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1