刷题leetcode
以leetcode为主的刷题
swallowblank
这个作者很懒,什么都没留下…
展开
-
C++ 中对于常用容器使用方法的汇总
1向量 vector1.1 声明一个二维向量并初始化vector<类型> 名称(长度, 每一个的初始值)vector<vector<int>> graph(rows, vector<int>(columns, [0]));1.2 常用方法namedescemplace_back()push_back()同上pop_back()删除最后一个元素clear()清空...原创 2021-07-27 20:36:36 · 113 阅读 · 0 评论 -
LeetCode 208. 实现 Trie (前缀树)
字典树嘛,懂的都懂,这里用JavaScript实现。js下的实现我一开始用的是数组,长度为26的数组。后来发现用对象是更优的,因为JavaScript中的对象是一个很特殊的数据结构,如果使用对象可以很轻松的突破26个小写字母的限制,非常好。注意:在实现字典树的时候,对于一个字符串的末尾节点要添加end标记,不然在 search 一个前缀的时候,不知道到底是前缀还是一个完整的单词。例如:insert search insert searchapple app app app原创 2021-04-14 15:15:18 · 73 阅读 · 0 评论 -
二分的再次讨论——LeetCode 153. 寻找旋转排序数组中的最小值
int findMin(vector<int>& nums) { int n = nums.size(); if (nums[n-1] >= nums[0]) return nums[0]; int lo = 0, hi = n-1; while (lo < hi) { int mid = (lo + hi) / 2; if (nums[mid] <...原创 2021-04-08 12:04:16 · 72 阅读 · 0 评论 -
【快慢指针】Leetcode 80. 删除数组中的重复项 II
part 1 题目介绍注意读题,要注意两点:数组是有序的,根据示例可以看出是升序。一般提到原地算法就是,利用数组内的空间进行操作,比如这道题应该是要使用数组后面的数覆盖前面的数以达到原地目的。part 2 思路使用快慢指针,慢指针指向应该被覆盖的位置,快指针指向最新的位置。这里需要判断一个元素已经出现了几次。需要清晰知道fast、slow指针的含义,说实话这道题虽然代码简单,当时这里真的容易搞晕。fast指针:fast指针指向待处理的元素,这里的待处理有两种情况:需要向前slow指原创 2021-04-07 16:15:40 · 85 阅读 · 0 评论 -
leetcode 190 - 翻转二进制位【分治位运算】
原题是颠倒,但我觉得会产生歧义,翻译成翻转比较好,类似于reverse,进行了左右翻转。输入: 00000010100101000001111010011100输出: 00111001011110000010100101000000方法一:逐位遍历每构建一位就向前推uint32_t reverseBits(uint32_t n) { uint32_t ans = 0; int time = 32; while (time --) {原创 2021-03-29 15:23:48 · 102 阅读 · 0 评论 -
leetcode 61 - 旋转链表
主要思路是,先把尾结点连到头结点上,形成一个环,然后找到正确的新的头结点位置,再断开。这里主要是要推一个公式,新链表的尾结点在原链表中的位置[0 1 2 3 4], k = 3, n = 5[0 1] 2 3 4[2 3 4 0 1] 2 3 4这里先看 k ,首先右移的距离很轻松判断出是k%n,当右移k%n后,原数组还剩 n - k%n,对应的下标是 n - k%n - 1,所以原数组下标为 n - k%n - 1 的节点就是最后一个节点,这个节点的下一个节点就是新的头结点,从这个节点之后断.原创 2021-03-29 11:07:30 · 121 阅读 · 0 评论 -
232. 用栈实现队列
一开始觉得挺脑瘫一题,后来发现自己对栈的理解还不够透彻。一开始的想法是,对于比较复杂的pop和peek操作,每次都都从mainStack转移到tempStack,形成一次逆序,然后再从tempStack取栈顶,结束后再移回mainStack。其实一开始就觉得这个方法是最垃圾的办法,但是也是最稳妥的办法,所以就没继续多想,往下写了。后来看了题解以后,发现这个tempStack的用法还可以用的更高级一些。对于mainStack,所有的push操作,都在里面进行。如果出现pop或peek操作,就把main中原创 2021-03-05 10:43:56 · 60 阅读 · 1 评论 -
leetcode 62. 不同路径——组合数代码实现
组合数代码实现今天遇到了一个题目就是机器人在矩形阵列中移动,每次只能向右或向下移动,问从左上角到右下角有多少种走法。老生常谈,要么dp,要么用组合数解。但是在用组合数解的时候,基本上是铁定溢出的,不能像个白痴一样硬套公式求阶乘。方法1 语言自带的组合数求解器方法2 代码实现int uniquePaths(int m, int n) { int M = (m < n ? m : n) - 1; int N = m + n - 2; long l原创 2020-12-09 10:58:28 · 115 阅读 · 0 评论 -
桶排序的高级用法 LeetCode 164. 最大间距
在传统桶排序中,桶的大小都是1,这似乎已经形成了思维定式,桶的大小只能为1,也没有想过,桶的大小这个概念。因此在平时创建桶的时候,都是直接声明一个很大的数组,譬如:int t[1000000];for (i...) { t[i] ++;}今天遇到了这么一道题:LeetCode 164. 最大间距其中数据的范围是32位整形的范围,而且要求算法的时间复杂度在O(n)以内,那么我第一个想到的排序算法就是桶排序,但是开辟一个32位整数能到达的大小的数组明显是不现实的,我还想到了用hashmap原创 2020-11-26 12:07:06 · 354 阅读 · 0 评论 -
竞赛中的C++小方法汇总
其实c++中有许多小方法,但是csdn就像一个巨大的垃圾库,你很容易搜到一些很垃圾的博客或代码。1. C++ 结构体构造函数struct node{ int x,y,state,step; int hasRock; node(int a, int b, int c, int d, int e):x(a), y(b), state(c), step(d), hasRock(f){}}node start = node(0,0,0,0,0);...原创 2020-07-29 14:43:47 · 466 阅读 · 0 评论 -
leetcode 动态规划 514. 自由之路
电子游戏“辐射4”中,任务“通向自由”要求玩家到达名为“Freedom Trail Ring”的金属表盘,并使用表盘拼写特定关键词才能开门。给定一个字符串 ring,表示刻在外环上的编码;给定另一个字符串 key,表示需要拼写的关键词。您需要算出能够拼写关键词中所有字符的最少步数。最初,ring 的第一个字符与12:00方向对齐。您需要顺时针或逆时针旋转 ring 以使 key 的一个字符在 12:00 方向对齐,然后按下中心按钮,以此逐个拼写完 key 中的所有字符。旋转 ring 拼出 key 字原创 2020-11-11 17:19:33 · 132 阅读 · 0 评论 -
【第34周 8月17~now】近期刷题总结
8月17日1. 判断是否是AVL(递归,自下而上)本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。来源:力扣思路:自下而上且递归地去计算每一个节点的子树是否失衡,官方题解中居然提到了自上而下的方法,这我想都没想到,感觉一般人也想不到这个蠢办法,这个办法主要是因为——子问题被大量重原创 2020-08-18 15:15:34 · 153 阅读 · 0 评论 -
近期刷题总结(7月15 至 8月10日)
动态规划组1. 数塔问题(动态规划 + 滚动数组)经典dp了,学动态规划的第一道例题,给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。[2],[3,4],[6,5,7],[4,1,8,3]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/triangle思路1dp[i][j]=min(dp[i−1][j原创 2020-08-10 20:18:55 · 286 阅读 · 0 评论 -
LeetCode-343. 整数拆分【动态规划、数学】
LeetCode-343. 整数拆分【动态规划、数学】题目链接给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。说明: 你可以假设 n 不小于 2 且不大于 58。来源:力扣(LeetCode)链接:https://leetcode-cn.com原创 2020-07-30 12:39:55 · 250 阅读 · 0 评论