![](https://img-blog.csdnimg.cn/2019092715111047.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode
力扣刷起来。
嘻嘻作者哈哈
喜欢折腾技术。寒窗苦读无人晓,一朝成名天下知。
展开
-
leetcode数组中的第k个最大元素或剑指offer数据流的第K大数值
方法1:快速排序的partiton结合减治法。方法2:小顶堆。原创 2022-06-03 13:18:49 · 374 阅读 · 0 评论 -
leetcode75. 颜色分类
采用双指针,类似快速排序的`partition`,将pivot设置为1.原创 2022-06-03 12:59:47 · 341 阅读 · 0 评论 -
leetcode 114. 二叉树展开为链表
题目二叉树展开为链表思路1由于函数签名的返回值为void,也就不能使用辅助链表+前序遍历的方式。采用分解的方法,通过递归,拆解为子问题。子问题为将左子树和右子树转为链表。子问题解决后,再将左子树变成右子树,原右子树接到新的右子树(原左子树)的最右边。代码class Solution { public void flatten(TreeNode root) { if(root == null) return; // 分解的思维 flat原创 2022-05-28 10:42:31 · 164 阅读 · 0 评论 -
leetcode 54. 螺旋矩阵
leetcode:54. 螺旋矩阵牛客:BM98 螺旋矩阵模拟法参考代码随想录:代码随想录-螺旋矩阵首先,需要确定定义边界的规则,从而确定模拟的区间,比如采用左闭右开,左闭右闭等。本题建议采用左闭右开,也就是起点闭合,终点打开。其次,循环次数也很重要,用来确定模拟什么时候结束。本题每转一圈是走2行和2列,因此模拟次数为行数和列数中最小值的一半。如果为奇数行或奇数列,每次走2行2列,最后会剩下1行或1列,因此最后需要模拟打印剩下的1行或一列。import java.util.ArrayL.原创 2022-05-15 14:46:10 · 247 阅读 · 0 评论 -
leetcode541. 反转字符串 II
题目:541. 反转字符串 II思路本人想法:通过计数器,计数到2k时,翻转前k个,剩余的最后翻转。不过这种思路没有通过要求的全部案例,只能AC一部分案例。学习正确做法将翻转情况分为2种情况第一种:剩余字符数大于等于k个,则翻转前k个;第二种:剩余字符数小于k个,则全部翻转。class Solution { public String reverseStr(String s, int k) { char[] ch = s.toCharArray(); int start = .原创 2022-03-16 21:12:51 · 806 阅读 · 0 评论 -
leetcode59. 螺旋矩阵 II
题目链接:59. 螺旋矩阵 II考点:模拟,边界定义。方法一将循环一圈定义为填充一次上、右、下、左。在循环填充过程中,要定义填充的起点和终点的边界,本解法采用左闭右开的边界。左闭右开解释:填充上侧时,包含左边界,而不包含右边接;填充右侧时,包含上边界,而不包含下边界;填充下侧时,包含右边界,而不包含左边界;填充左侧时,包含下边界,而不包含上边界。上图每一种颜色代表各自遍历时的长度。class Solution { public int[][] generateMatrix(i.原创 2022-03-13 17:37:15 · 491 阅读 · 0 评论 -
出现频率最高的 k 个数字或前 K 个高频元素
题目LeetCode剑指 Offer思路使用HashMap存储数字到出现频率的映射。使用大小为K的最小堆存储HashMap中的映射关系,使用PriorityQueue实现最小堆。建堆的规则采用出现频率作为依据。最后将堆中的键值对数据中的键取出。代码import java.util.Comparator;import java.util.HashMap;import java.util.PriorityQueue;import java.util.Map;public class原创 2022-02-28 23:29:54 · 153 阅读 · 0 评论 -
剑指 Offer II 048. 序列化与反序列化二叉树(前序遍历非递归、递归、层次遍历)
思路通常存储二叉树是采用链式的非线性方式存储,而此题需要用线性的存储方式。思维不同。首先确定遍历方式。将根节点作为第一个节点很方便,之后在遍历左子树和右子树,故可采取前序遍历和层次遍历。其次,线性的字符串存储,需要用分割符来划分不同的节点,可以采用逗号作为节点分隔符。然后,在链式存储中,由于左右子节点指针的存在,节点之间的关系可以通过指针指向来确定,树的结构也由此唯一确定,所以空节点一般不用考虑。而在线性存储结构中,没有指针确定节点之间的关系,所以需要考虑空节点,从而才能确定唯一的树结构。前序原创 2022-01-22 23:47:56 · 459 阅读 · 0 评论 -
剑指 Offer II 047. 二叉树剪枝(非递归和递归版本)
题目:二叉树剪枝思路分析首先先判断用前序、中序、后序、层次遍历中的哪一种。根据题目要求,当要将当前节点剪掉时,其左子树和右子树必须已经被剪掉,所以遍历顺序为左右根的后序遍历最合适。如果用其他遍历方式,根节点是在右子树之前被遍历,不好判断其右子树是否已经被剪掉了,自然也就不能确定当前节点是否需要被剪掉。非递归后序遍历代码(单栈)zhiyouclass Solution { public TreeNode pruneTree(TreeNode root){ if(root ==原创 2022-01-21 22:27:31 · 508 阅读 · 0 评论 -
leetcode 整数拆分(c++)
思路:先用暴力递归,之后用记忆化搜索,最后动态规划.枚举所有可能:以计算4为例如上图所示,2被重复计算,所以可以使用记忆化搜索,将第一次计算得到的结果保存下来,当以后再出现时直接使用第一次计算得到的值。vs2019运行代码#include<iostream>#include<algorithm> //max#include<ctime>#i...原创 2019-03-08 21:16:18 · 1509 阅读 · 1 评论