随笔分类 -  leetcode题目

上一页 1 ··· 8 9 10 11 12 13 14 15 16 下一页
记录leetcode刷题做题笔记
摘要:题目: 思路: 【1】借鉴 剑指 Offer II 081. 允许重复选择元素的组合(39. 组合总和)这道题。首先先从题目看会发现高度重合,区别在于,一个可以重复选,一个不可以重复选,其次是一个是去重的数组,一个是不去重的数组。那么改起来也很简单。 【2】先对数组进行去重,再进行回溯的方式 代码展 阅读全文
posted @ 2023-04-03 15:39 忧愁的chafry 阅读(22) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 【1】回溯算法 + 剪枝的方式,一般而言这种最好是画出树形图,如candidates = [2, 3, 6, 7], target = 7 为例: 【2】其次,根据题目可知是组合(即 [2, 2, 3] 与 [2, 3, 2] 视为相同列表,这表示了我们要去重),去重的方式可以采用指 阅读全文
posted @ 2023-04-03 12:48 忧愁的chafry 阅读(21) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 【1】动态规划的方式,首先对于动态规划的问题是分成子问题,那么子问题又可以当做是一个小汇总,如 对于 1≤i<n,第 i 号房子和第 i−1 号房子的颜色必须不同, 因此当第 i 号房子被粉刷成某一种颜色时,第 i−1 号房子只能被粉刷成另外两种颜色之一。 当第 i 号房子分别被粉刷 阅读全文
posted @ 2023-04-03 11:28 忧愁的chafry 阅读(14) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 【0】这道题算是 剑指 Offer II 089. 房屋偷盗(198. 打家劫舍) 的变种,增加了环形的设计。 【1】动态规划的方式 代码展示: 动态规划的方式: //时间0 ms击败100% //内存38.8 MB击败72.14% class Solution { public i 阅读全文
posted @ 2023-03-31 16:24 忧愁的chafry 阅读(41) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 【0】这道题吧,怎么说,算是大学了解动态规划入门的一道题吧。思路和跳台阶很像,因为当位置为N的时候,情况可以分为两种,就是N的位置选和不选,选的话,那么根据最大值的原理,必然是F(N)= x + F(N-2) ,x为N位置的值。如果不选,那么必然是因为F(N-1)> x + F(N- 阅读全文
posted @ 2023-03-31 15:27 忧愁的chafry 阅读(19) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 【1】暴力枚举的方式: 【2】使用字典树优化的方式: 代码展示: 使用字典树优化的方式: //时间29 ms击败58.92% //内存43.5 MB击败52.31% //时间复杂度:O(nl+ql∣Σ∣),其中 n 是数组 dictionary 的长度,l 是数组 dictionar 阅读全文
posted @ 2023-03-30 18:23 忧愁的chafry 阅读(19) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 【0】首先题目限制了O(nlog⁡n)的时间复杂度,这个大家应该都会有印象,毕竟大部分排序算法都是这个复杂度,其次空间复杂度为O(1),也就是说,最多借助常量值的辅助变量。而归并排序基于分治算法。最容易想到的实现方式是自顶向下的递归实现,考虑到递归调用的栈空间,自顶向下归并排序的空间 阅读全文
posted @ 2023-03-29 14:37 忧愁的chafry 阅读(16) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 【0】首先常规的做法必然是不符合进阶的,毕竟要满足O(log n),那么只能二分了,不过幸好的是,数组是有序的。 【1】全数组的二分查找的方式 【2】偶数下标的二分查找的方式 代码展示: 偶数下标的二分查找的方式: //时间0 ms击败100% //内存41.8 MB击败22.25% 阅读全文
posted @ 2023-03-29 14:33 忧愁的chafry 阅读(14) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 【1】错误的尝试 【2】不进行排序该如何正确的处理 【3】进行排序的处理 代码展示: 进行排序的处理: //时间5 ms击败90.74% //内存44.4 MB击败16.45% //时间复杂度:O(nlog⁡n),其中 n 为区间的数量。 //除去排序的开销,我们只需要一次线性扫描, 阅读全文
posted @ 2023-03-29 14:28 忧愁的chafry 阅读(12) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 【0】这道题怎么说呢,不算难,考察的就是能不能默写快排和堆排,说直白点就是要去记,去背,要回默写,其他的没那么重要。 【1】堆排序 【2】快速排序 【3】基于哈希表的方式 代码展示: 基于哈希表的方式: //时间1 ms击败94.61% //内存41.6 MB击败53.84% cla 阅读全文
posted @ 2023-03-28 17:33 忧愁的chafry 阅读(21) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 【1】暴力破解的方式 【2】哈希表的方式 【3】字典树的方式 代码展示: 字典树的方式: //时间73 ms击败96.85% //内存60.3 MB击败47.71% //时间复杂度:O(nlog⁡C),其中 n 是数组 nums 的长度,C 是数组中的元素范围,在本题中 C<2^31 阅读全文
posted @ 2023-03-28 12:24 忧愁的chafry 阅读(12) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 【1】哈希集合(这种其实更像是暴力破解的方式,通过分割字符进行比对) 【2】字典树(字典树的逻辑研究的话会发现消耗的内存空间相对更少,但是遍历逻辑两者差不多,但是耗费的时间确实天差地别,着实是需要深思的) 代码展示: 字典树优化版本: //时间10 ms击败79.14% //内存57 阅读全文
posted @ 2023-03-27 13:02 忧愁的chafry 阅读(6) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 【1】其实如果是考虑最快取出来的话,应该是对于在数组中填充对应个数的下标,如【1,3】那么对应存储的数组应该是【0,1,1,1】,这种通过随机数获取下标是最快能拿出来的,但是弊端也很明显,需要的空间很大,就如【100,500,1】,这种如果导致内存溢出。所以需要换种方式。 【2】前缀 阅读全文
posted @ 2023-03-26 18:14 忧愁的chafry 阅读(18) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 【1】暴力破解的方式: 【2】桶计数+滑动窗口的方式: 利用桶排序的思想解决: 按照元素的大小进行分桶,维护一个滑动窗口内的元素对应的元素。 对于元素 xxx,其影响的区间为 [x−t,x+t]。于是可以设定桶的大小为 t+1。 如果两个元素同属一个桶,那么这两个元素必然符合条件。 阅读全文
posted @ 2023-03-24 15:04 忧愁的chafry 阅读(16) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 【1】暴力破解的方式: 【2】二分查找的方式: 代码展示: 二分查找的方式: //时间24 ms击败73.28% //内存42.3 MB击败55.84% //时间复杂度:O(nlog⁡n), 其中 n 表示日程安排的数量。由于每次在进行预订时,都需要进行二分查找,需要的时间为 O(l 阅读全文
posted @ 2023-03-23 12:35 忧愁的chafry 阅读(35) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 【1】其实我觉得吧,这个题有点问题,说是必须优于O(n log n),那么是不是就是禁止使用堆了呢,优先队列里面使用的不就是堆排序的思想?那么时间复杂度也为O(n log n),这不就是禁止使用了。神神叨叨不干人事 代码展示: //时间12 ms击败89.10% //内存44.3 M 阅读全文
posted @ 2023-03-23 12:10 忧愁的chafry 阅读(18) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 【0】仔细认真观察其实就会发现一个规律,这个二叉搜索树的中序遍历是顺序的,而变更之后的更大和树的中序遍历,其实就是二叉搜索树中序遍历后,从后面往前面叠加的情况,如【0,1,2,3,4,5,6,7,8】变为【36,36,35,33,30,26,21,15,8】即 7+8 = 15 ,6 阅读全文
posted @ 2023-03-22 14:26 忧愁的chafry 阅读(10) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 【1】中序遍历 【2】利用二叉搜索树的性质 代码展示: 利用二叉搜索树的性质的方式: //时间2 ms击败100% //内存42.2 MB击败74.85% //时间复杂度:O(n),其中 n 是二叉搜索树的节点数。遍历的节点数不超过二叉搜索树的高度,平均情况是 O(log⁡n),最坏 阅读全文
posted @ 2023-03-22 14:05 忧愁的chafry 阅读(14) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 【1】这种情况其实递归的写法会比循环遍历的写法要好写的多,如每下一层就会把,之前的数值乘10,但同样要记住,当左右节点都为空的时候其实就不应该再往下叠一层。 代码展示: //时间0 ms击败100% //内存39 MB击败67.82% /** * Definition for a b 阅读全文
posted @ 2023-03-21 14:12 忧愁的chafry 阅读(9) 评论(0) 推荐(0) 编辑
摘要:题目: 思路: 【1】递归的方式 【2】循环的方式 代码展示: 递归的方式: //时间0 ms击败100% //内存41.1 MB击败41.2% //时间复杂度:O(n),其中 n 是二叉树的节点数目。需要遍历 n 个节点。 //空间复杂度:O(n)。递归栈需要占用 O(n) 的空间。 class 阅读全文
posted @ 2023-03-21 12:19 忧愁的chafry 阅读(12) 评论(0) 推荐(0) 编辑

上一页 1 ··· 8 9 10 11 12 13 14 15 16 下一页