
LeetCode
asjodnobfy
这个作者很懒,什么都没留下…
展开
-
为什么要对1000000007取模(取余)
大数阶乘,大数的排列组合等,一般都要求将输出结果对1000000007取模(取余)为什么总是1000000007呢= =大概≖‿≖✧是因为:(我猜的,不服你打我呀~)1000000007是一个质数(素数),对质数取余能最大程度避免冲突~int32位的最大值为2147483647,所以对于int32位来说1000000007足够大int64位的最大值为2^63-1,对于1000000007来说它的平方不会在int64中溢出所以在大数相乘的时候,因为(a∗b)%c=((a%c)∗(b%c))%c,转载 2022-04-30 13:59:21 · 1304 阅读 · 0 评论 -
剑指 Offer 53 - II. 0~n-1中缺失的数字
https://leetcode-cn.com/problems/que-shi-de-shu-zi-lcof/代码class Solution { public int missingNumber(int[] nums) { int left = 0; //左 int right = nums.length-1; //右 while(left<=right){ int mid = (left+right)/2原创 2022-04-04 09:16:51 · 247 阅读 · 0 评论 -
剑指 Offer 35. 复杂链表的复制
https://leetcode-cn.com/problems/fu-za-lian-biao-de-fu-zhi-lcof/代码 (hash表/*// Definition for a Node.class Node { int val; Node next; Node random; public Node(int val) { this.val = val; this.next = null; this.ran原创 2022-03-24 10:36:43 · 390 阅读 · 0 评论 -
剑指 Offer 24. 反转链表
https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof/Java 代码(三个指针/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public List原创 2022-03-24 10:06:09 · 609 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/Java (借助栈/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution {原创 2022-03-24 09:41:22 · 641 阅读 · 0 评论 -
剑指 Offer 30. 包含min函数的栈
https://leetcode-cn.com/problems/bao-han-minhan-shu-de-zhan-lcof/代码class MinStack { //键值对思想 private Stack<Integer> dataStack; // 数据栈 private Stack<Integer> minStack; // 辅助栈,记录每次有元素进栈后或者出栈后,元素的最小值 /** initialize your data stru原创 2022-03-23 21:22:12 · 209 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列
https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/Java代码class CQueue { //两个栈,一个出栈,一个入栈 private Stack<Integer> stack1; private Stack<Integer> stack2; public CQueue() { //栈初始化 stack1 = n原创 2022-03-23 18:45:23 · 895 阅读 · 0 评论 -
222.完全二叉树的节点个数(队列+递归)
222.完全二叉树的节点个数解题思路辅助队列层序遍历代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), lef原创 2022-01-22 09:00:19 · 85 阅读 · 0 评论 -
559.N叉树的最大深度
559.N叉树的最大深度解题思路1借助队列的层序遍历代码/*// Definition for a Node.class Node {public: int val; vector<Node*> children; Node() {} Node(int _val) { val = _val; } Node(int _val, vector<Node*> _children) { val原创 2022-01-14 10:57:20 · 86 阅读 · 0 评论 -
二叉树的遍历总结
前 中 后 序遍历144.145.二叉树的前序后序遍历(递归层序遍历102.二叉树层序遍历(队列)107.二叉树的层序遍历II(102的反转)N叉树:429.N叉树的层序遍历原创 2022-01-14 10:08:02 · 181 阅读 · 0 评论 -
589. N 叉树的前序遍历(栈迭代)+590.N叉树的后序遍历(递归)
589. N 叉树的前序遍历解题思路利用栈进行迭代代码class Solution { public List<Integer> preorder(Node root) { LinkedList<Integer> result = new LinkedList<>(); //为空判断 if (root == null) { return result; }原创 2022-01-14 10:01:58 · 93 阅读 · 0 评论 -
101. 对称二叉树(辅助队列迭代+递归)
101. 对称二叉树解题思路辅助队列迭代代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullp原创 2022-01-11 15:01:57 · 82 阅读 · 0 评论 -
101. 对称二叉树
101. 对称二叉树解题思路递归三要素:递归函数(参数以及返回类型)+ 终止条件 +单层递归逻辑代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode原创 2022-01-11 14:35:09 · 285 阅读 · 0 评论 -
226.翻转二叉树(广度优先+递归+栈迭代)
226.翻转二叉树解题思路1借助队列的广度优先遍历代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(原创 2022-01-10 15:52:05 · 85 阅读 · 0 评论 -
111.二叉树的最小深度(队列/递归)
111.二叉树的最小深度解题思路辅助队列层数计数器dep叶子节点的判断即为判断该节点是否有左右子树。没有左右子树时说明为叶子节点,说明为最小深度,直接return代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr原创 2022-01-08 13:22:20 · 582 阅读 · 0 评论 -
104.二叉树的最大深度(队列层序遍历+递归)
104.二叉树的最大深度解题思路借助队列,遍历完一层,层数+1代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x),原创 2022-01-08 13:03:34 · 90 阅读 · 0 评论 -
117.填充每个节点的下一个右侧节点指针II
117.填充每个节点的下一个右侧节点指针II解题思路思路同116题一样代码/*// Definition for a Node.class Node {public: int val; Node* left; Node* right; Node* next; Node() : val(0), left(NULL), right(NULL), next(NULL) {} Node(int _val) : val(_val), left(NULL原创 2022-01-08 12:50:41 · 124 阅读 · 0 评论 -
116.填充每个节点的下一个右侧节点指针
116.填充每个节点的下一个右侧节点指针解题思路借助队列,判断队列中的元素是否为二叉树种每层的最后一个元素,进行next指针修改。所有指针修改完毕,最后直接返回根节点root。代码/*// Definition for a Node.class Node {public: int val; Node* left; Node* right; Node* next; Node() : val(0), left(NULL), right(NULL), ne原创 2022-01-08 12:19:35 · 80 阅读 · 0 评论 -
515. 在每个树行中找最大值
515. 在每个树行中找最大值解题思路利用深度有限搜索算法。vector类的size()函数返回该容器对象当前存储的元素个数。当结果数组的size和二叉树的层数相同时,替换数据,使结果数组内数据值最大。代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : v原创 2022-01-05 16:47:17 · 393 阅读 · 0 评论 -
515. 在每个树行中找最大值
515. 在每个树行中找最大值老套路超时:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr)原创 2022-01-05 16:29:54 · 96 阅读 · 0 评论 -
429.N叉树的层序遍历
解题思路老套路借助队列与前几题的不同:在子树vector入队的过程中需要迭代一个个入队。代码/*// Definition for a Node.class Node {public: int val; vector<Node*> children; Node() {} Node(int _val) { val = _val; } Node(int _val, vector<Node*> _child原创 2022-01-05 11:39:11 · 629 阅读 · 0 评论 -
637.二叉树的层平均值
637. 二叉树的层平均值解题思路借助队列遍历二叉树的每一层对每一层求和sum每层的个数即为队列的size最后求得平均值avg,再存放在结果result中。代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr),原创 2022-01-05 10:47:03 · 142 阅读 · 0 评论 -
199.二叉树的右视图
199.二叉树的右视图解题思路借助队列进行层序遍历,在遍历的基础上修改进入返回结果的条件。***每入队一轮,队列中的最后一个元素是二叉树每层的最后一个元素代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), ri原创 2021-12-11 09:31:55 · 82 阅读 · 0 评论 -
102.二叉树层序遍历(队列)107.二叉树的层序遍历II(102的反转)
https://leetcode-cn.com/problems/binary-tree-level-order-traversal/解题思路使用队列实现,队列变化的size为返回的二维数组每行的大小代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(原创 2021-12-10 09:46:59 · 131 阅读 · 0 评论 -
144.145.二叉树的前序后序遍历(递归)
解题思路前序遍历:先遍历根节点再遍历左子树(递归)再遍历右子树(递归)递归函数的三个要点:确定递归函数的参数和返回值确定终止条件确定单层递归的逻辑代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(in原创 2021-10-08 15:34:49 · 132 阅读 · 0 评论 -
71.简化路径
https://leetcode-cn.com/problems/simplify-path/解题思路先拆分(通过 / ),再拼接双端队列Deque用于存储被/拆分开的文件或者文件名需要判断"." “” 和"…"的情况再通过StringBuilder进行拼接需要判断什么时候可以在尾部添加 /代码class Solution { public String simplifyPath(String path) { //双端队列 Deque<Str原创 2021-10-06 09:57:31 · 103 阅读 · 0 评论 -
347.前k个高频元素(优先队列)
这两天的优先队列搞得我有点懵解题思路//1. 需要统计元素出现的频率:使用Map//2. 需要筛选出前k个频率最高的元素:即维护一个最小顶堆,每次弹出的都是最小的,保留下来的是前k个频率最大的元素代码class Solution { //1. 需要统计元素出现的频率:使用Map //2. 需要筛选出前k个频率最高的元素:即维护一个最小顶堆,每次弹出的都是最小的,保留下来的是前k个频率最大的元素 public int[] topKFrequent(int[] nums,原创 2021-10-05 10:05:44 · 161 阅读 · 0 评论 -
239. 滑动窗口最大值
https://leetcode-cn.com/problems/sliding-window-maximum/什么是优先队列?普通队列:按顺序的 FIFO,通过线性结构实现优先队列:不论入队顺序,按照优先级顺序出队,通过堆结构实现二叉堆性质:1.最大堆的堆顶是整个堆中的最大元素2.最小堆的堆顶是整个堆中的最小元素因此,可以用最大堆来实现最大优先队列,每一次入队操作就是堆的插入操作,每一次出队操作就是删除堆顶节点。二叉堆节点上浮和下沉的时间复杂度:O(logn),所以优先队列入队和出队的时间原创 2021-10-03 11:22:40 · 92 阅读 · 0 评论 -
150.逆波兰表达式求值
解题思路遍历tokens,遇到数字入栈,遇到运算符号,从栈中取出两个数组经过运算以后,将结果入栈代码(Java)class Solution { public int evalRPN(String[] tokens) { //栈 Deque<Integer> stack= new LinkedList<>(); //遍历tokens for(int i=0; i<tokens.length; i+原创 2021-10-02 15:24:10 · 97 阅读 · 0 评论 -
1047.删除字符串中的所有相邻重复项
https://leetcode-cn.com/problems/remove-all-adjacent-duplicates-in-string/解题思路利用栈遍历字符串中的所有字符如果栈为空,直接入栈否则判断该字符是否与栈顶元素相同如果两字符相同,删除栈顶元素如果两字符不同,将当前字符入栈最后留下的栈内字符都是相邻不重复的字符由于Deque是双向队列,可以从队尾弹出字符,并添加到StringBuffer对象中.最终将StringBuffer通过toString()方法返回字符串代码(原创 2021-10-02 14:44:48 · 111 阅读 · 0 评论 -
20.有效的括号
题目https://leetcode-cn.com/problems/valid-parentheses/解题思路用栈解决:碰到左括号,就把对应的右括号入栈。否则拦截出栈元素(有括号)与遍历的右括号不相同情况,以及栈为空情况(左右括号个数不匹配),返回FALSE否则判断出栈元素与遍历的元素是否一致Java的Deque:定义双向队列:支持插入删除元素的线性集合。java官方文档推荐用deque实现栈(stack)。参考:https://blog.youkuaiyun.com/onedegree/a原创 2021-09-30 11:14:44 · 89 阅读 · 0 评论 -
255.用队列实现栈
解题思路主要在于:新元素入栈的时候,是先放在备用队列,再将主队列的元素输出到备用队列,接在新元素后面。使得新元素处于第一个弹出位置。调换两个队列的元素,也就是把辅助队列的元素全部放到主队列。后续取元素和弹出元素都直接从主队列操作就可以了。Java的话需要区别几个方法,可以避免一些异常判断offer,add 区别:一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝。这时新的 offer 方法就可以起作用了。它不是对调用 add() 方法抛出一个 unchecked原创 2021-09-29 09:45:26 · 72 阅读 · 0 评论 -
232.用栈实现队列
232.用栈实现队列代码class MyQueue { //定义两个栈实现队列 Stack<Integer> stack1; Stack<Integer> stack2; //初始化(在堆里) public MyQueue() { stack1 = new Stack<>();//负责入队 stack2 = new Stack<>();//负责出队 }原创 2021-09-28 09:58:46 · 94 阅读 · 0 评论 -
error: illegal character ‘\u3000‘
‘\u3000’ 是一个中文全角空格从其他地方粘贴过来的代码产生的。把代码中的空格删掉换成英文的。原创 2021-09-22 09:18:52 · 2414 阅读 · 0 评论 -
209.长度最小的子数组(滑动窗口)
给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr],并返回其长度。如果不存在符合条件的子数组,返回 0 。示例 1:输入:target = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是该条件下的长度最小的子数组。示例 2:输入:target = 4, nums = [1,4,4] 输出:1 示例 3:输入.原创 2021-08-18 09:18:55 · 94 阅读 · 0 评论 -
844.比较含退格的字符串
给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。注意:如果对空文本输入退格字符,文本继续为空。示例 1:输入:S = “ab#c”, T = “ad#c” 输出:true 解释:S 和 T 都会变成 “ac”。 示例 2:输入:S = “ab##”, T = “c#d#” 输出:true 解释:S 和 T 都会变成 “”。 示例 3:输入:S = “a##c”, T = “#a#c” 输出:true 解释:S 和 T 都会变成.原创 2021-08-16 09:02:32 · 93 阅读 · 0 评论 -
283.移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明:必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数。来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/move-zeroes著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解题思路移动元素,使用快慢指针。快指针用于从0开始寻找目标对象.原创 2021-08-15 09:11:47 · 114 阅读 · 0 评论 -
367.有效的完全平方数
解题思路与题 69.x的平方根 意思差不多都用二分法来求解,寻找一个能够被平方等于num的数找得到就是true找不到就是false时间复杂度为 O(logn)代码class Solution { public boolean isPerfectSquare(int num){ //采用二分法 初始边界:[0,num] //寻找能够被平方等于为num的数 int left= 0,right = num; //int mid =left + (right-原创 2021-08-13 09:43:08 · 102 阅读 · 0 评论 -
26.删除有序数组中的重复项
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝 int len = removeDuplicates(nu.原创 2021-08-14 09:40:18 · 80 阅读 · 0 评论 -
69.x的平方根
实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4 输出: 2 示例 2:输入: 8 输出: 2 说明: 8 的平方根是 2.82842…,由于返回类型是整数,小数部分将被舍去。来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/sqrtx著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。二分法,.原创 2021-08-11 10:02:57 · 150 阅读 · 0 评论