![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
文卿的藏剑山庄
这个作者很懒,什么都没留下…
展开
-
C语言设计题7-实现前缀树
前缀树(字典树)实现原创 2023-03-07 22:40:06 · 150 阅读 · 0 评论 -
C语言设计题6-实现一个魔法字典
实现一个魔法字典原创 2023-03-03 10:56:37 · 148 阅读 · 0 评论 -
C语言设计题练习5-设计循环双端队列
设计循环双端队列原创 2023-03-03 10:18:11 · 150 阅读 · 0 评论 -
C语言设计题练习4-设计循环队列
设计循环队列原创 2023-03-02 17:19:31 · 113 阅读 · 0 评论 -
C语言设计题练习2-设计哈希映射
lc706原创 2023-02-28 10:23:51 · 69 阅读 · 0 评论 -
C语言设计题练习1-设计哈希集合
leetcode705 C语言实现原创 2023-02-27 11:39:11 · 93 阅读 · 0 评论 -
同向双指针题目练习
leetcode同向双指针题目练习原创 2023-02-10 11:23:00 · 291 阅读 · 0 评论 -
283. 移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。来源:力扣(LeetCode)方法一:自己写的,遍历两次,第一次遍历的同时记录下非0数的个数,作为更新数组非零元素的下标。第二次遍历把后面的元素全部置0。class Solution { public void moveZeroes(int[] nu原创 2020-11-19 10:52:52 · 62 阅读 · 0 评论 -
1122. 数组的相对排序
给你两个数组,arr1 和 arr2,arr2 中的元素各不相同,arr2 中的每个元素都出现在 arr1 中。对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。示例:输入:arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]输出:[2,2,2,1,4,3,3,9,6,7,19]提示:arr1.length, arr2.lengt原创 2020-11-14 13:27:27 · 88 阅读 · 0 评论 -
72. 编辑距离
给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符来源:力扣(LeetCode)二维dp冲啊class Solution { public int minDistance(String word1, String word2) { int n1=word1.length(); int n2=word2.length();原创 2020-11-05 14:20:06 · 55 阅读 · 0 评论 -
941. 有效的山脉数组
给定一个整数数组 A,如果它是有效的山脉数组就返回 true,否则返回 false。让我们回顾一下,如果 A 满足下述条件,那么它是一个山脉数组:A.length >= 3在 0 < i < A.length - 1 条件下,存在 i 使得:A[0] < A[1] < … A[i-1] < A[i]A[i] > A[i+1] > … > A[A.length - 1]来源:力扣(LeetCode)第一次写的代码:class Solut原创 2020-11-03 10:39:48 · 42 阅读 · 0 评论 -
349. 两个数组的交集
给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]说明:输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。来源:力扣(LeetCode)解法:HashSet利用Set不可重复、无序性的特点class Solution { public int[] interse原创 2020-11-02 22:01:30 · 80 阅读 · 0 评论 -
1207. 独一无二的出现次数
给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。示例 1:输入:arr = [1,2,2,1,1,3]输出:true解释:在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。没有两个数的出现次数相同。来源:力扣(LeetCode)方法一:先用一个HashMap来存储每个元素出现的次数;再用一个HashSet来存储HashMap里各个键值出现的次数。如果HashMap和HashS原创 2020-10-28 11:05:15 · 122 阅读 · 0 评论 -
1365. 有多少小于当前数字的数字
给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。以数组形式返回答案。示例 1:输入:nums = [8,1,2,2,3]输出:[4,0,1,1,3]解释:对于 nums[0]=8 存在四个比它小的数字:(1,2,2 和 3)。对于 nums[1]=1 不存在比它小的数字。对于 nums[2]=2原创 2020-10-26 12:30:57 · 63 阅读 · 0 评论 -
763. 划分字母区间
字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。示例 :输入:S = “ababcbacadefegdehijhklij”输出:[9,7,8]解释:划分结果为 “ababcbaca”, “defegde”, “hijhklij”。每个字母最多出现在一个片段中。像 “ababcbacadefegde”, “hijhklij” 的划分是错误的,因为划分的片段数较少。来源:力扣(LeetCode)原创 2020-10-22 12:42:21 · 69 阅读 · 0 评论 -
925. 长按键入
你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回 True。示例 1:输入:name = “alex”, typed = “aaleex”输出:true解释:‘alex’ 中的 ‘a’ 和 ‘e’ 被长按。示例 2:输入:name = “saeed”, typed = “ssaaedd”输出:false解释原创 2020-10-21 23:56:39 · 248 阅读 · 0 评论 -
143. 重排链表
给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.来源:力扣(LeetCode)思路比较容易,首先找到原创 2020-10-20 21:30:18 · 78 阅读 · 0 评论 -
19. 删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?来源:力扣(LeetCode)自己第一次写的代码:思路就是先遍历一遍,获得链表的节点数目,节点数目减去n得到要删除节点的索引值。然后再遍历一遍删掉对应索引的节点。注意如果遍历完了还原创 2020-10-18 12:01:07 · 52 阅读 · 0 评论 -
52. N皇后 II
n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给定一个整数 n,返回 n 皇后不同的解决方案的数量。来源:力扣(LeetCode)思路和51题完全一样,且比51题简单class Solution { public int totalNQueens(int n) { Set<Integer>cols=new HashSet<Integer>(); Set<Integer>dig原创 2020-10-17 14:04:14 · 41 阅读 · 0 评论 -
51. N 皇后
n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。皇后彼此不能相互攻击,也就是说:任何两个皇后都不能处于同一条横行、纵行或斜线上。给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。示例:输入:4输出:[[".Q…", // 解法 1“…Q”,“Q…”,“…Q.”],["…Q.", // 解法 2“Q…”,“…Q”,“.原创 2020-10-17 13:59:32 · 81 阅读 · 0 评论 -
Leetcode-416. 分割等和子集
给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200示例 1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11].来源:力扣(LeetCode)用动态规划的方法,二维布尔dp数组存储的是nums数组下标从0到i的数字是否有若干个数字和为j,状态转移方程如代码所示:class Solution { public bool原创 2020-10-11 17:30:51 · 111 阅读 · 0 评论 -
Leetcode-142. 环形链表 II
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。来源:力扣(LeetCode)思路说明设:入环节点为M,入环之前路径长度为a(不包括入环节点M),环长度为b。慢指针和快指针第一次相遇时慢指针走了s步,快指针走了f步。显然:f=2s,f=s+nb即:s=nb,f=2nb。又:从出发走a+nb步一原创 2020-10-09 17:22:49 · 239 阅读 · 0 评论 -
Leetcode-112. 路径总和
给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。来源:力扣(LeetCode)我的解法:class Solution { Stack<Integer> path=new Stack<>(); public boolean hasPathSum(TreeNode root, int sum) { if(root==null) r原创 2020-10-07 16:45:09 · 67 阅读 · 0 评论 -
Leetcode-109. 有序链表转换二叉搜索树
给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。来源:力扣(LeetCode)类似第108题,依然采用递归和二分法。自己的方法,用了快慢指针来寻找链表的中点,并在中点的位置处截断链表。注意还需要用一个pre指针还记录中点位置(slow)的前驱节点。class Solution { public TreeNode sortedListToBST(ListNode head) {原创 2020-10-07 15:13:21 · 104 阅读 · 0 评论 -
Leetcode-108. 将有序数组转换为二叉搜索树
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。来源:力扣(LeetCode)二分法+递归:class Solution { public TreeNode sortedArrayToBST(int[] nums) { return helper(nums,0,nums.length-1); } public TreeNode helper(int[]num原创 2020-10-06 20:58:13 · 64 阅读 · 0 评论 -
Leetcode-103. 二叉树的锯齿形层次遍历
在层次遍历的基础上加上对于节点层奇偶性的判断:class Solution { public List<List<Integer>> zigzagLevelOrder(TreeNode root) { List<List<Integer>>res=new ArrayList<>(); if(root==null) return res; Queue<TreeNo原创 2020-10-06 20:38:45 · 42 阅读 · 0 评论 -
Leetcode-1598. 文件夹操作日志搜集器
每当用户执行变更文件夹操作时,LeetCode 文件系统都会保存一条日志记录。下面给出对变更操作的说明:“…/” :移动到当前文件夹的父文件夹。如果已经在主文件夹下,则 继续停留在当前文件夹 。“./” :继续停留在当前文件夹。“x/” :移动到名为 x 的子文件夹中。题目数据 保证总是存在文件夹 x 。给你一个字符串列表 logs ,其中 logs[i] 是用户在 ith 步执行的操作。文件系统启动时位于主文件夹,然后执行 logs 中的操作。执行完所有变更文件夹操作后,请你找出 返回主原创 2020-10-05 15:33:14 · 180 阅读 · 0 评论 -
Leetcode-1609. 奇偶树
如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 :二叉树根节点所在层下标为 0 ,根的子节点所在层下标为 1 ,根的孙节点所在层下标为 2 ,依此类推。偶数下标 层上的所有节点的值都是 奇 整数,从左到右按顺序 严格递增奇数下标 层上的所有节点的值都是 偶 整数,从左到右按顺序 严格递减给你二叉树的根节点,如果二叉树为 奇偶树 ,则返回 true ,否则返回 false 。来源:力扣(LeetCode)简单的层次遍历,每次遍历的时候判断节点是否满足要求,用isEvenLevel来存储当前原创 2020-10-05 11:35:30 · 121 阅读 · 0 评论 -
Leetcode-1608. 特殊数组的特征值
给你一个非负整数数组 nums 。如果存在一个数 x ,使得 nums 中恰好有 x 个元素 大于或者等于 x ,那么就称 nums 是一个 特殊数组 ,而 x 是该数组的 特征值 。注意: x 不必是 nums 的中的元素。如果数组 nums 是一个 特殊数组 ,请返回它的特征值 x 。否则,返回 -1 。可以证明的是,如果 nums 是特殊数组,那么其特征值 x 是 唯一的 。示例 1:输入:nums = [3,5]输出:2解释:有 2 个元素(3 和 5)大于或等于 2 。示例 2原创 2020-10-05 11:30:05 · 311 阅读 · 1 评论 -
Leetcode-120. 三角形最小路径和
给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。来源:力扣(LeetCode)直接用dp:class Solution { public int minimumTotal(List<List<Integer>> triangle) { int n=triangle.size(); int [][]dp=n原创 2020-09-29 17:23:59 · 64 阅读 · 0 评论 -
Leetcode-117. 填充每个节点的下一个右侧节点指针II
给定一个二叉树struct Node { int val; Node *left; Node *right; Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。进阶:你只能使用常量级额外空间。使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。来源:力扣(LeetCode)第一种方法,类似102原创 2020-09-28 15:32:37 · 100 阅读 · 0 评论 -
Leetcode-235. 二叉搜索树的最近公共祖先
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”来源:力扣(LeetCode)class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if(p.va原创 2020-09-27 14:46:03 · 70 阅读 · 0 评论 -
Leetcode-113. 路径总和 II
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22,返回:[[5,4,11,2],[5,8,4,5]]来源:力扣(LeetCode)dfs方法:class Solution { List<List<Integer>>res=new ArrayList<>(); Stack<Integer>path=n原创 2020-09-26 22:48:43 · 52 阅读 · 0 评论 -
Leetcode-448. 找到所有数组中消失的数字
给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例:输入:[4,3,2,7,8,2,3,1]输出:[5,6]来源:力扣(LeetCode)比41题简单很多,原地构造哈希表即可。具体思路可见41题。class Solution { pub原创 2020-09-23 20:51:09 · 157 阅读 · 0 评论 -
Leetcode-1426. 数元素
给你一个整数数组 arr, 对于元素 x ,只有当 x + 1 也在数组 arr 里时,才能记为 1 个数。如果数组 arr 里有重复的数,每个重复的数单独计算。示例 1:输入:arr = [1,2,3]输出:2解释:1 和 2 被计算次数因为 2 和 3 在数组 arr 里。示例 2:输入:arr = [1,1,3,3,5,5,7,7]输出:0解释:所有的数都不算, 因为数组里没有 2、4、6、8。示例 3:输入:arr = [1,3,2,3,5,0]输出:3解释:0、原创 2020-09-23 20:35:21 · 344 阅读 · 0 评论 -
Leetcode-876. 链表的中间结点
给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])示例 2:输入:[1,2,3,4,5,6]输出:此列表中的结点 4 (序列化形式:[4,5,6])由于该列表有两个中间结点,值分别为 3 和 4,我们返回第二个结点。来源:力扣(LeetCode)双指针求解:class Solution { public ListNode原创 2020-09-22 17:30:54 · 675 阅读 · 0 评论 -
Leetcode-148. 排序链表
在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5来源:力扣(LeetCode)思路用归并排序的思路,首先用双指针法从中间节点把链表分成两部分(参考第876题),向下拆开;然后依次合并两个有序链表(参考第21题),向上合并。class原创 2020-09-22 17:28:16 · 102 阅读 · 0 评论 -
Leetcode-412. Fizz Buzz
写一个程序,输出从 1 到 n 数字的字符串表示。如果 n 是3的倍数,输出“Fizz”;如果 n 是5的倍数,输出“Buzz”;如果 n 同时是3和5的倍数,输出 “FizzBuzz”。示例:n = 15,返回:[“1”,“2”,“Fizz”,“4”,“Buzz”,“Fizz”,“7”,“8”,“Fizz”,“Buzz”,“11”,“Fizz”,“13”,“14”,“FizzBuzz”]来源:力扣(LeetCode)非常简单的题目:c原创 2020-09-22 15:24:10 · 169 阅读 · 0 评论 -
Leetcode-441. 排列硬币
你总共有 n 枚硬币,你需要将它们摆成一个阶梯形状,第 k 行就必须正好有 k 枚硬币。给定一个数字 n,找出可形成完整阶梯行的总行数。n 是一个非负整数,并且在32位有符号整型的范围内。来源:力扣(LeetCode)class Solution { public int arrangeCoins(int n) { int i=1; while(n>=0){ n-=i; i++;原创 2020-09-22 15:12:50 · 86 阅读 · 0 评论 -
Leetcode-538. 把二叉搜索树转换为累加树
给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。来源:力扣(LeetCode)我们知道对BST中序遍历的结果是结点从小到大排列,因此我们只需要反向中序遍历BST获得从大到小的排列即可。class Solution { int sum=0; public TreeNode convertBST(TreeNode root) { if(root原创 2020-09-21 22:49:14 · 76 阅读 · 0 评论