![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode刷题
LeetCode刷题,每天进步一点点!
丿SeeYouAgain
学无止境,不学无术。☺︎
展开
-
20220610其他:任务调度器
题目描述:给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。在任何一个单位时间,CPU 可以完成一个任务,或者处于待命状态。 然而,两个 相同种类 的任务之间必须有长度为整数 n 的冷却时间,因此至少有连续 n 个单位时间内 CPU 在执行不同的任务,或者在待命状态。你需要计算完成所有任务所需要的 最短时间 。...原创 2022-06-10 11:37:03 · 67 阅读 · 0 评论 -
20220609其他:多数元素
题目描述:给定一个大小为 的数组 ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。原创 2022-06-09 13:33:17 · 85 阅读 · 0 评论 -
20220608其他:逆波兰表达式求值
根据逆波兰表示法,求表达式的值。有效的算符包括+、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。注意两个整数之间的除法只保留整数部分。原创 2022-06-08 09:46:59 · 88 阅读 · 0 评论 -
20220607其他:两整数之和
题目描述:给你两个整数,不使用运算符 + 和 - ,计算并返回两整数之和。原创 2022-06-07 13:34:09 · 74 阅读 · 0 评论 -
20220606数学:分数到小数
题目描述:给定两个整数,分别表示分数的分子 和分母 ,以 字符串形式返回小数 。如果小数部分为循环小数,则将循环的部分括在括号内。如果存在多个答案,只需返回 任意一个 。对于所有给定的输入,保证 答案字符串的长度小于10^4 。...原创 2022-06-06 09:25:10 · 90 阅读 · 0 评论 -
20220605数学:两数相除
题目描述:给定两个整数,被除数 和除数 。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 除以除数 得到的商。整数除法的结果应当截去()其小数部分。原创 2022-06-05 16:11:17 · 192 阅读 · 0 评论 -
20220604数学:x的平方根
题目描述:给你一个非负整数 ,计算并返回 的 算术平方根 。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。原创 2022-06-04 10:08:55 · 113 阅读 · 0 评论 -
20220603数学:Pow(x,n)
题目描述:实现 pow(x, n) ,即计算 的 次幂函数(即, )。原创 2022-06-03 09:38:42 · 65 阅读 · 0 评论 -
20220602数学:Excel表列序号
题目描述:给你一个字符串 ,表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。原创 2022-06-02 09:14:08 · 94 阅读 · 0 评论 -
20220601数学:阶乘后的零
题目描述:给定一个整数 ,返回 结果中尾随零的数量。原创 2022-06-01 09:18:41 · 76 阅读 · 0 评论 -
20220531数学:快乐数
题目描述:编写一个算法来判断一个数 n 是不是快乐数。快乐数定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为1,那么这个数就是快乐数。如果 n 是 快乐数 就返回 true ;不是,则返回 false 。 编码实现: public static boolean isHappy(int n) { ...原创 2022-05-31 10:13:37 · 79 阅读 · 0 评论 -
20220530设计问题:常数时间插入、删除和获取随机元素
题目描述:实现RandomizedSet类:RandomizedSet() 初始化 RandomizedSet 对象bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。bool remove(int val) 当元素 val 存在时,从集合中移除该项,并返回 true ;否则,返回 false 。int getRandom() 随机返回现有集合中的一项(测试用例保证调用此方法时集合中至少存在一个元素)...原创 2022-05-30 18:10:35 · 49 阅读 · 0 评论 -
20220529设计问题:二叉树的序列化与反序列化
题目描述:序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。 编码实现: private static final String TMP= "-...原创 2022-05-29 21:41:16 · 58 阅读 · 0 评论 -
20220528动态规划:最长递增子序列
题目描述:给你一个整数数组nums,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 编码实现: public int lengthOfLIS(int[] nums) { if (null == nums){ return 0; } int s...原创 2022-05-28 11:35:26 · 81 阅读 · 0 评论 -
20220527动态规划:零钱兑换
题目描述:给你一个整数数组coins,表示不同面额的硬币;以及一个整数amount,表示总金额。计算并返回可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。你可以认为每种硬币的数量是无限的。 编码实现: public int coinChange(int[] coins, int amount) { int[] dp = new int[amount+1]; for(int i =...原创 2022-05-27 08:32:26 · 77 阅读 · 0 评论 -
20220526动态规划:不同路径
题目描述:一个机器人位于一个m x n网格的左上角 。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。问总共有多少条不同的路径? 编码实现: public int uniquePaths(int m, int n) { if (m == 1 || n == 1) { return 1; } int [][]matrix = new int[m][n]; ...原创 2022-05-26 10:12:30 · 48 阅读 · 0 评论 -
20220525动态规划:跳跃游戏
题目描述:给定一个非负整数数组nums,你最初位于数组的第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。 编码实现: public boolean canJump(int[] nums) { int tmp = nums[0]; for (int i = 1; i < nums.length - 1; i++) { if (i <= tmp)...原创 2022-05-25 09:20:41 · 183 阅读 · 0 评论 -
20220524搜索和排序:搜索二维矩阵II
题目描述:编写一个高效的算法来搜索mxn矩阵matrix中的一个目标值target。该矩阵具有以下特性:每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 编码实现: public boolean searchMatrix(int[][] matrix, int target) { int row = 0,column = matrix[0].length - 1; while (row < ma...原创 2022-05-24 11:18:13 · 87 阅读 · 0 评论 -
20220523搜索和排序:搜索旋转排序数组
题目描述:整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。给你 旋转后 的数...原创 2022-05-23 09:16:55 · 53 阅读 · 0 评论 -
20220522搜索和排序:合并区间
题目描述:以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。 编码实现: List<int[]> result = new ArrayList<>(); Arrays.sort(intervals, (a, b) -> Integer.comp...原创 2022-05-22 10:27:52 · 81 阅读 · 0 评论 -
20220521搜索和排序:在排序数组中查找元素的第一个和最后一个位置
题目描述:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。 编码实现: public int[] searchRange(int[] nums, int target) { int[] result = new int[2]; result[0] = -1; result[1] = -1...原创 2022-05-21 13:53:45 · 64 阅读 · 0 评论 -
20220520搜索和排序:寻找峰值
题目描述:峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设nums[-1] = nums[n] = -∞。你必须实现时间复杂度为O(log n)的算法来解决此问题。 编码实现: public int findPeakElement(int[] nums) { int result = 0; wh...原创 2022-05-20 09:09:49 · 128 阅读 · 0 评论 -
20220519搜索和排序:数组中的第K个最大元素
题目描述:给定整数数组nums和整数k,请返回数组中第k个最大的元素。请注意,你需要找的是数组排序后的第k个最大的元素,而不是第k个不同的元素。 编码实现: public int findKthLargest(int[] nums, int k) { PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(); for (int...原创 2022-05-19 08:38:02 · 83 阅读 · 0 评论 -
20220518搜索和排序:前K个高频元素
题目描述:给你一个整数数组nums和一个整数k,请你返回其中出现频率前k高的元素。你可以按任意顺序返回答案。 编码实现: public static int[] topKFrequent(int[] nums, int k) { if (null == nums || nums.length == 0){ return null; } Map<Integer, In...原创 2022-05-18 09:06:42 · 92 阅读 · 0 评论 -
20220517搜索和排序:颜色分类
题目描述:给定一个包含红色、白色和蓝色、共n个元素的数组nums,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数0、1和2分别表示红色、白色和蓝色。必须在不使用库的sort函数的情况下解决这个问题。 编码实现: public void sortColors(int[] nums) { if (null == nums || nums.length == 0){ r...原创 2022-05-17 08:57:10 · 129 阅读 · 0 评论 -
20220516回溯算法:单词搜索
题目描述:给定一个m x n二维字符网格board和一个字符串单词word。如果word存在于网格中,返回true;否则,返回false。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 编码实现: public boolean exist(char[][] board, String word) { char[] words =...原创 2022-05-16 09:26:05 · 72 阅读 · 0 评论 -
20220515回溯算法:子集
题目描述:给你一个整数数组nums,数组中的元素互不相同。返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。你可以按任意顺序返回解集。 编码实现: public List<List<Integer>> subsets(int[] nums) { List<List<Integer>> result = new ArrayList<>(); back...原创 2022-05-15 10:17:06 · 99 阅读 · 0 评论 -
20220514回溯算法:全排列
题目描述:给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 编码实现: public List<List<Integer>> permute(int[] nums) { List<List<Integer>> result = new ArrayList<>(); backtrack(nums, 0, result); ...原创 2022-05-14 09:53:04 · 168 阅读 · 0 评论 -
20220513回溯算法:括号生成
题目描述:数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。 编码实现: public List<String> generateParenthesis(int n) { List<String> list = new ArrayList<>(); if (n == 0) { list.add(""); ...原创 2022-05-13 09:57:11 · 102 阅读 · 0 评论 -
20220512回溯算法:电话号码的字母组合
题目描述:给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。答案可以按任意顺序返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 编码实现: public List<String> letterCombinations(String digits) { LinkedList<String> result = new LinkedList<>(); i...原创 2022-05-12 11:02:58 · 87 阅读 · 0 评论 -
20220511树和图:岛屿数量
题目描述:给你一个由'1'(陆地)和'0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。 编码实现: public int numIslands(char[][] grid) { if (null == grid || grid.length == 0){ return 0; }...原创 2022-05-11 14:03:04 · 89 阅读 · 0 评论 -
20220510树和图:二叉搜索树中第K小的元素
题目描述:给定一个二叉搜索树的根节点root,和一个整数k,请你设计一个算法查找其中第k个最小元素(从 1 开始计数)。 编码实现: public int kthSmallest(TreeNode root, int k) { int leftCount = countNodes(root.left); if (leftCount >= k) { return kthSmallest(ro...原创 2022-05-10 10:33:06 · 124 阅读 · 0 评论 -
20220509树和图:填充每个节点的下一个右侧节点指针
题目描述:给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node { int val; Node *left; Node *right; Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为NULL。初始状态下,所有next 指针都被设置为NULL。 编码实现:public Node c...原创 2022-05-09 09:14:59 · 168 阅读 · 0 评论 -
20220508树和图:从前序与中序遍历序列构造二叉树
题目描述:给定两个整数数组preorder 和 inorder,其中preorder 是二叉树的先序遍历, inorder是同一棵树的中序遍历,请构造二叉树并返回其根节点。 编码实现:public TreeNode buildTree(int[] preorder, int[] inorder) { if (null == preorder || preorder.length == 0){ return null; ...原创 2022-05-08 09:35:25 · 648 阅读 · 0 评论 -
20220507树和图:二叉树的锯齿形层次遍历
题目描述:给你二叉树的根节点root,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 编码实现: public List<List<Integer>> zigzagLevelOrder(TreeNode root) { List<List<Integer>> res = new ArrayList<>(); ...原创 2022-05-07 09:25:58 · 199 阅读 · 0 评论 -
20220506树和图:二叉树的中序遍历
题目描述:给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。编码实现: public List<Integer> inorderTraversal(TreeNode root) { List<Integer> result = new ArrayList<>(); recursion(root, result); return result; } public v...原创 2022-05-07 08:32:55 · 185 阅读 · 0 评论 -
20220505链表:相交链表
题目描述:给你两个单链表的头节点headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回null。题目数据保证整个链式结构中不存在环。注意,函数返回结果后,链表必须保持其原始结构。 编码实现: public ListNode getIntersectionNode(ListNode headA, ListNode headB) { Set<ListNode> set = ne...原创 2022-05-05 08:26:23 · 801 阅读 · 0 评论 -
20220504链表:奇偶链表
题目描述:给定单链表的头节点head,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。第一个节点的索引被认为是奇数,第二个节点的索引为偶数,以此类推。请注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致。你必须在O(1)的额外空间复杂度和O(n)的时间复杂度下解决这个问题。 编码实现: public ListNode oddEvenList(ListNode head) { if (hea...原创 2022-05-04 10:15:28 · 340 阅读 · 0 评论 -
20220503链表:两数相加
题目描述:给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0开头。 编码实现: public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode newHead = new ListNode(0); ...原创 2022-05-03 10:09:04 · 50 阅读 · 0 评论 -
20220502数组和字符串:递增的三元子序列
题目描述:给你一个整数数组nums,判断这个数组中是否存在长度为3的递增子序列。如果存在这样的三元组下标 (i, j, k)且满足 i < j < k ,使得nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。 编码实现:public boolean increasingTriplet(int[] nums) { boolean result = false; ...原创 2022-05-02 09:48:39 · 118 阅读 · 0 评论