力扣算法
个人回收
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
力扣1667. 修复表中的名字
表:Users在 SQL 中,user_id 是该表的主键。该表包含用户的 ID 和名字。名字仅由小写和大写字符组成。修复名字,使得只有第一个字符是大写的,其余都是小写的。返回按user_id排序的结果表。返回结果格式示例如下。原创 2023-07-26 23:13:06 · 457 阅读 · 0 评论 -
LRU算法
/ 该操作会使得关键字 2 作废,缓存是 {1=1, 3=3}lRUCache.put(4, 4);// 该操作会使得关键字 1 作废,缓存是 {4=4, 3=3}lRUCache.put(2, 2);// 缓存是 {1=1, 2=2}// 返回 -1 (未找到)lRUCache.get(1);// 返回 -1 (未找到)lRUCache.put(1, 1);// 缓存是 {1=1}lRUCache.get(1);请你设计并实现一个满足。的平均时间复杂度运行。原创 2023-06-04 13:08:20 · 552 阅读 · 0 评论 -
面试题 16.10. 生存人数
使用差分数组,可以把一个区间得每一个数加1得操作,变成2个端点得操作,时间复杂度是O(1)。这样直观得想法就是给出一个区间[x,y],就把区间[x,y]里面每个数字都加上1,最后扫描一遍[1900,2000]看看哪个点得值最大。问题可以看成问数轴1900到2000得范围内哪个点被覆盖得次数最多,覆盖是指题目给出得区间[出生日期,死亡日期]二维差分是在二维数组上进行的,然后再使用前缀和进行求解某一个点的影响次数。同样的,需要进行离散化,结合题目的范围,只需要离散化x轴。类似的题目2251. 花期内花的数目。原创 2023-05-27 10:12:28 · 82 阅读 · 0 评论 -
力扣338. 比特位计数
设 f(i) 表示数字 i 的二进制表示中 1 的个数,则 f(i) 的值由 i / 2 的值转移而来,即 f(i) = f(i / 2) + (i & 1)。设 n 的二进制表示中 1 的个数为 x,则 n & (n - 1) 的二进制表示中 1 的个数为 x - 1。直接遍历 0~n 中的每个数字,对每个数字进行二进制表示并计算其中的 1 的个数。时间复杂度:O(nlogn),其中 logn 表示二进制表示中的位数。时间复杂度:O(n)。时间复杂度:O(n)。原创 2023-04-06 09:09:12 · 140 阅读 · 0 评论 -
力扣643. 子数组最大平均数 I
一个朴素的想法是:对每个起点,往后枚举 k 个数看看平均数是否大于等于 t,这样时间复杂度为 O(nk)。注意到 k 是固定的,我们可以对所有子数组长度为 k 的区间预处理一个前缀和,然后只需要 O(1) 的时间计算一个区间的平均值。这样预处理的时间是 O(n),判断是否存在满足条件的区间的时间是 O(n),总时间复杂度是 O(n)。如果我们能够 O(1) 判断是否存在平均数大于等于一个给定数 t 的 k 个连续的数列,那么我们就可以用二分答案得到最终的答案。原创 2023-04-05 22:46:20 · 132 阅读 · 0 评论 -
力扣611. 有效三角形的个数
【代码】力扣611. 有效三角形的个数。原创 2023-04-05 22:03:22 · 195 阅读 · 0 评论 -
力扣80.无重复的元素Ⅱ
具体的,我们从第三个数字开始遍历整个数组。如果快指针指向的数字和慢指针指向的数字相同,则快指针向前移一位;如果快指针指向的数字和慢指针指向的数字不同,则将快指针指向的数字复制到慢指针后面一个位置,并将快指针和慢指针均向前移一位。最后,慢指针指向的下标就是新数组的长度。由于要保留重复元素最多出现两次,我们可以设置一个快指针和一个慢指针来处理数组。快指针用于遍历整个数组,慢指针用于记录符合要求的数字的下标。时间复杂度:O(n),其中 n 是数组的长度。空间复杂度:O(1)。原创 2023-04-05 21:53:45 · 183 阅读 · 0 评论 -
力扣26. 删除有序数组中的重复项
解题思路: 由于数组是有序的,我们可以通过双指针的方式来解决。定义两个指针,一个慢指针 i 和一个快指针 j,初始值都为 0。当 nums[i] == nums[j] 时,快指针 j 后移一位;当 nums[i]!= nums[j] 时,将 nums[j] 赋值给 nums[i+1],i 后移一位,j 后移一位。最后返回 i+1 的值即可。时间复杂度:O(n) 空间复杂度:O(1)原创 2023-04-05 21:25:40 · 78 阅读 · 0 评论 -
力扣:11. 盛最多水的容器
首先容器的容量取决于长度和高度的乘积,而长度是由两个指针之间的距离决定的,因此我们可以使用双指针法,从数组两端开始扫描,计算当前两条线段构成的容量并更新最大容量值。每次移动指针时,由于容器的容量取决于短的那条线段,因此我们每次移动短的那条线段所在的指针。时间复杂度:O(n),只需要遍历整个数组一次即可。空间复杂度:O(1)。具体细节见代码注释。原创 2023-04-05 21:14:45 · 78 阅读 · 0 评论
分享