LeetCode刷题
Fiona Tracy
这个作者很懒,什么都没留下…
展开
-
leetcode删除有序数组中的重复项
太笨了,太笨了解法:只需把不重复的元素放前面public int removeDuplicates(int[] nums) { if (nums.length == 0) { return 0; } if (nums.length == 1) { return nums[0]; } //双指针 int left = 0; int right = 1; while (right < nums.length) {//右指针一直往下找与当前元素不一样的 ..原创 2022-01-26 22:56:56 · 150 阅读 · 0 评论 -
kill回文数
1.回文数定义设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数解法不计算它有多少位,依次取最右边的数技巧:非0 ,若最后一位是0的,也不是回文数,因为不可能010public boolean isPalindrome(int x) { // 负数肯定不是回文数 if (x < 0) { return false; } // 最后一位是0的,也不是回文数,因为不可能010 if (x != 0 && x % 10 =原创 2022-01-25 22:05:09 · 107 阅读 · 0 评论 -
LeetCode1834. 单线程 CPU(Java)
题目给你一个二维数组 tasks ,用于表示 n 项从 0 到 n - 1 编号的任务。其中 tasks[i] = [enqueueTimei, processingTimei] 意味着第 i 项任务将会于 enqueueTimei 时进入任务队列,需processingTimei 的时长完成执行。现有一个单线程 CPU ,同一时间只能执行 最多一项 任务,该 CPU 将会按照下述方式运行:如果 CPU 空闲,且任务队列中没有需要执行的任务,则 CPU 保持空闲原创 2021-04-29 15:16:40 · 397 阅读 · 0 评论 -
LeetCode1123.最深叶节点的最近公共祖先(java/递归+后序遍历)
题目给定一个根为 root 的二叉树,每个节点的深度是 该节点到根的最短距离 。如果一个节点在 整个树 的任意节点之间具有最大的深度,则该节点是 最深的.一个节点的 子树 是该节点加上它的所有后代的集合。返回能满足 以该节点为根的子树中包含所有最深的节点 这一条件的具有最大深度的节点。输入:root = [3,5,1,6,2,0,8,null,null,7,4]输出:[2,7,4]解释:我们返回值为 2 的节点,在图中用黄色标记。在图中用蓝色标记的是树的最深的节点。注意,节点 5原创 2021-04-27 08:29:12 · 244 阅读 · 0 评论 -
LeetCode897.递增顺序搜索树(Java修改节点指向)
题目给你一棵二叉搜索树,请你 按中序遍历将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。输入:root = [5,3,6,2,4,null,8,1,null,null,null,7,9]输出:[1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9]分析如果是采用原地改变结点指向的方法的话:需要中间量,来牵线采用链表设置头结点的思想,也给树设置一个头结点head原创 2021-04-26 20:32:04 · 105 阅读 · 0 评论 -
LeetCode979.在二叉树中分配硬币(Java)
题目给定一个有 N 个结点的二叉树的根结点 root,树中的每个结点上都对应有 node.val 枚硬币,并且总共有 N枚硬币。在一次移动中,我们可以选择两个相邻的结点,然后将一枚硬币从其中一个结点移动到另一个结点。(移动可以是从父结点到子结点,或者从子结点移动到父结点)返回使每个结点上只有一枚硬币所需的移动次数。图一:图二:分析1.N个结点总共N个金币;2.不去看移动,落实到每个顶点:一个顶点的值最后都要是1,所以node.val -1就是它需要被给或者给出去的金币数量;如果n原创 2021-04-25 09:22:59 · 245 阅读 · 0 评论 -
LeetCode105.前序与中序构造二叉树(Java)——VS中序+后序
题目根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:前序:根左右,先处理根节点,再处理左子树,最后右子树中序:确定根节点的位置,划分出左右子树的下标范围 HashMap<Integer, Integer> map = new HashMap<>(); int index = 0;//从前面原创 2021-04-23 21:32:01 · 107 阅读 · 0 评论 -
LeetCode1448.统计二叉树中好节点的数目(Java)
题目给你一棵根为 root 的二叉树,请你返回二叉树中好节点的数目。「好节点」X 定义为:从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值。question:如何没有图示,你会发现根节点也算是一个好节点吗?输入:root = [3,1,4,3,null,1,5]输出:4解释:图中蓝色节点为好节点。根节点 (3) 永远是个好节点。节点 4 -> (3,4) 是路径中的最大值。节点 5 -> (3,4,5) 是路径中的最大值。节点 3 -> (3,.原创 2021-04-23 21:20:39 · 160 阅读 · 0 评论 -
LeetCode106. 从中序与后序遍历序列构造二叉树(Java)
题目根据一棵树的中序遍历与后序遍历构造二叉树。你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]HashMap<Integer, Integer> map = new HashMap<>();// 用于存储中序遍历的元素 int index;// 从后序遍历最后一个元素(根)开始,往前移动 public TreeNode buildTree(int[原创 2021-04-22 22:13:54 · 90 阅读 · 0 评论 -
LeetCode27.移除元素(Java)
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。输入:nums = [3,2,2,3], val = 3输出:2, nums = [2,2]解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而.原创 2021-04-20 21:14:27 · 59 阅读 · 0 评论 -
LeetCode114.二叉树展开为链表(Java)
题目给你二叉树的根结点 root ,请你将它展开为一个单链表:展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。输入:root = [1,2,5,3,4,null,6]输出:[1,null,2,null,3,null,4,null,5,null,6]先将右孩子都安置好,再来找他的父节点找前驱节点public class 二叉树展开为链表 { private原创 2021-04-20 21:08:54 · 111 阅读 · 0 评论 -
LeetCode80.删除有序数组中的重复项II(Java+双指针)
题目给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。输入:nums = [1,1,1,2,2,3]输出:5, nums = [1,1,2,2,3]解释:函数应返回新长度 length = 5原创 2021-04-06 20:49:52 · 134 阅读 · 0 评论 -
LeetCode63.不同路径II(Java)
题目一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]输出:2解释:3x3 网格的正中间有一个障碍物。从左上角到右下角一共有 2 条不同的路径:向原创 2021-03-30 10:52:36 · 231 阅读 · 0 评论 -
LeetCode62.不同路径(Java)
题目一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?输入:m = 3, n = 7输出:28解法一:递归递归怎么写?如果没有看别人的代码,自己应该怎么分析呢?题目规定从左上角,走到右下角,起点和终点都是确定的。由于只能往下走,或者往右走,那么我们在递归的时候,m-1就是往下走,n-1就是往右走。那么我们如何求得原创 2021-03-30 08:21:09 · 82 阅读 · 0 评论 -
LeetCode1038.把二叉搜索树转换为累加树(java)——同LeetCode538
题目给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。提醒一下,二叉搜索树满足下列约束条件:节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。左右子树也必须是二叉搜索树。感想第一次做二叉搜索树的题目??第一次读题的时候没有get到题目的要求,以及隐含的条件!我觉得可能是没有理解的那么透彻吧。二叉搜索树:左的值<根的值&原创 2021-03-27 20:39:20 · 70 阅读 · 0 评论 -
LeetCode1302.层数最深叶子节点的和(Java)
题目给你一棵二叉树的根节点 root ,请你返回 层数最深的叶子节点的和输入:root = [1,2,3,4,5,null,6,7,null,null,null,null,8]输出:15写法一:自己写的,又笨又啰嗦 int level = 0; int sum = 0; public int deepestLeavesSum(TreeNode root) { if (root == null) { return 0; } dfs(root, 1);// 一定注意,根也原创 2021-03-25 22:10:00 · 259 阅读 · 0 评论 -
LeetCode111.二叉树的最小深度(Java/BFS/DFS)
题目给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。第一次写的代码,我觉得逻辑性不够强写法一:DFS int min = Integer.MAX_VALUE; public int minDepth(TreeNode root) { if (root == null) { return 0; } // 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 dfs(root, 1);//原创 2021-03-25 18:40:13 · 103 阅读 · 0 评论 -
LeetCode67.把字符串转换成整数(Java)
题目写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。注意:假原创 2021-03-22 11:30:27 · 91 阅读 · 0 评论 -
LeetCode112. 路径总和(Java)
题目给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和 targetSum 。叶子节点 是指没有子节点的节点。示例输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22输出:true输入:root = [1,2,3], targetSum = 5输出:false输入:root = [1,2], ta原创 2021-03-21 08:29:18 · 92 阅读 · 0 评论 -
LeetCode48.最长不含重复字符的子字符串(Java)
题目请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不原创 2021-03-19 16:17:26 · 69 阅读 · 0 评论 -
LeetCode92.反转链表II(Java)
题目给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。示例输入:head = [1,2,3,4,5], left = 2, right = 4输出:[1,4,3,2,5]加入一个头结点,使操作统一,还能符合left从head开始的情况。public ListNode reverseBetween(ListNode head, int left, i原创 2021-03-19 12:52:14 · 295 阅读 · 0 评论 -
LeetCode300.最长递增子序列(Java+动态规划)
题目给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。示例 2:输入:nums = [0,1,0,3,2,3]输出:4示例 3:输入:nums = [7,7,原创 2021-03-18 07:32:00 · 340 阅读 · 0 评论 -
LeetCode376.摆动序列(Java)
题目如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5]和 [1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。给定一个整数序列,返回作为摆动序列的最长子序列的长度。 通过从原始序列中删除一些(也可原创 2021-03-17 17:12:13 · 102 阅读 · 0 评论 -
LeetCode131.分割回文串(Java+dfs)
题目给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。回文串 是正着读和反着读都一样的字符串。示例 1:输入:s = “aab”输出:[[“a”,“a”,“b”],[“aa”,“b”]]示例 2:输入:s = “a”输出:[[“a”]]分析判断子串是否为回文串,可以用String自带的SubString取子串,然后判断是否为回文串public class 分割回文串 { public static void main(St原创 2021-03-07 20:49:07 · 68 阅读 · 0 评论 -
LeetCode765.情侣牵手(Java)
题目N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手。计算最少交换座位的次数,以便每对情侣可以并肩坐在一起。一次交换可选择任意两人,让他们站起来交换座位。人和座位用 0 到 2N-1 的整数表示,情侣们按顺序编号,第一对是 (0, 1),第二对是 (2, 3),以此类推,最后一对是(2N-2, 2N-1)。这些情侣的初始座位 row[i] 是由最初始坐在第 i 个座位上的人决定的。示例 1:输入: row = [0, 2, 1, 3]输出: 1解释: 我们只需要交换row[原创 2021-02-14 21:18:05 · 262 阅读 · 0 评论 -
LeetCode.1702解码异或后的数组(Java+异或)
a ^ b = cc ^ b = a题目未知 整数数组 arr 由 n 个非负整数组成。 经编码后变为长度为 n - 1 的另一个整数数组 encoded ,其中encoded[i] = arr[i] XOR arr[i + 1] 。例如,arr = [1,0,2,1] 经编码后得到encoded= [1,2,3] 。给你编码后的数组 encoded 和原数组 arr 的第一个元素 first(arr[0])。请解码返回原数组 arr 。可以证明答案存在并且是唯一的。输入:encod.原创 2021-02-08 21:14:52 · 207 阅读 · 0 评论 -
LeetCode1436. 旅行终点站(Java)
题目给你一份旅游线路图,该线路图中的旅行线路用数组 paths 表示,其中 paths[i] = [cityAi, cityBi] , 表示该线路将会从 cityAi 直接前往 cityBi 。请你找出这次旅行的终点站,即没有任何可以通往其他城市的线路的城市。题目数据保证线路图会形成一条不存在循环的线路,因此只会有一个旅行终点站。示例 1:输入:paths = [[“London”,“New York”],[“New York”,“Lima”],[“Lima”,“Sao Paulo”]]输出原创 2021-01-24 23:22:51 · 130 阅读 · 0 评论 -
LeetCode674. 最长连续递增序列(java)
题目给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i+ 1] ,那么子序列 [nums[l], nums[l + 1], …, nums[r - 1], nums[r]] 就是连续递增子序列。示例输入:nums = [1,3,5,4,7]输出:3解释:最长连续递增序列是 [1,3,5], 长度为3。原创 2021-01-24 11:46:38 · 161 阅读 · 0 评论 -
LeetCode1221.分割平衡字符串(Java+统计个数)
英语单词还是要背呀~题目在一个「平衡字符串」中,‘L’ 和 ‘R’ 字符的数量是相同的。给出一个平衡字符串 s,请你将它分割成尽可能多的平衡字符串。返回可以通过分割得到的平衡字符串的最大数量。示例输入:s = “RLRRLLRLRL”输出:4解释:s 可以分割为 “RL”, “RRLL”, “RL”, “RL”, 每个子字符串中都包含相同数量的 ‘L’ 和 ‘R’。提示:Loop from left to right maintaining a balance variable原创 2020-12-25 22:04:32 · 185 阅读 · 0 评论 -
圣诞节分发饼干吗??LeetCode455分发饼干啦~(Java)
题目假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。思路一:小饼干先喂小胃口public int findContentChildren2(int[] g, int[] s)原创 2020-12-25 20:34:56 · 52 阅读 · 0 评论 -
LeetCode767.重构字符串(Java先计数后隔开存放)
题目给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。若可行,输出任意可行的结果。若不可行,返回空字符串。示例 1:输入: S = “aab” 输出: “aba” 示例 2:输入: S = “aaab” 输出: “”难呀难,学习呀生活呀人生啊~~~~public class ReorganizeString { public static void main(String[] args) { ReorganizeString test = new Reor原创 2020-12-24 20:09:33 · 97 阅读 · 1 评论 -
LeetCode1614.括号的最大嵌套深度(Java)
题目如果字符串满足以下条件之一,则可以称之为 有效括号字符串(valid parentheses string,可以简写为 VPS):字符串是一个空字符串 “”,或者是一个不为 “(” 或 “)” 的单字符。字符串可以写为 AB(A 与 B 字符串连接),其中 A 和 B都是 有效括号字符串 。字符串可以写为 (A),其中 A 是一个 有效括号字符串 。类似地,可以定义任何有效括号字符串 S 的 嵌套深度depth(S):depth("") = 0 depth© = 0,其中 C 是单个字原创 2020-12-24 19:57:07 · 402 阅读 · 1 评论 -
LeetCode387.字符串中的第一个唯一字符(Java+四种方法)
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。写法一:HashMappublic int firstUniqChar(String s) { HashMap<Character, Integer> map = new HashMap<>(); for (int i = 0; i < s.length(); i++) { char temp = s.charAt(i); map.put(temp, map.get.原创 2020-12-23 21:56:31 · 130 阅读 · 0 评论 -
LeetCode1684.统一一致字符串的数目(Java+两种方法)
题目给你一个由不同字符组成的字符串 allowed 和一个字符串数组 words 。如果一个字符串的每一个字符都在 allowed 中,就称这个字符串是 一致字符串 。请你返回 words 数组中 一致字符串 的数目。输入:allowed = “ab”, words = [“ad”,“bd”,“aaab”,“baa”,“badab”]输出:2解释:字符串 “aaab” 和 “baa” 都是一致字符串,因为它们只包含字符 ‘a’ 和 ‘b’ 。输入:allowed = “abc”, wo原创 2020-12-18 16:25:12 · 178 阅读 · 1 评论 -
LeetCode389.找不同(Java位运算+求和+计数)
给定两个字符串 s 和 t,它们只包含小写字母。字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。请找出在 t 中被添加的字母。示例 1:输入:s = “abcd”, t = “abcde”输出:“e”解释:‘e’ 是那个被添加的字母。方法一:位运算我们知道 若b=0,a^b =a ,a ^a =0,所以如果是多余的字符,则结果不会为0...原创 2020-12-18 14:47:32 · 100 阅读 · 0 评论 -
LeetCode1200.最小绝对差(Java+暴力)
给你个整数数组 arr,其中每个元素都 不相同。 请你找到所有具有最小绝对差的元素对,并且按升序的顺序返回。今天也是暴力的一天 public List<List<Integer>> minimumAbsDifference(int[] arr) { if (arr.length < 2) { return new ArrayList<>(); } Arrays.sort(arr); List<List<Integer>.原创 2020-12-16 22:09:39 · 145 阅读 · 0 评论 -
LeetCode1160.拼写单词(Java+暴力+HashMap)
题目给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。 假如你可以用 chars 中的『字母』(字符)拼写出words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。 注意:每次拼写(指拼写词汇表中的一个单词)时,chars中的每个字母都只能用一次。 返回词汇表 words 中你掌握的所有单词的 长度之和。输入:words = [“cat”,“bt”,“hat”,“tree”],chars = “atach”输出:6解释 可以形成字符串 “c原创 2020-12-15 09:45:39 · 138 阅读 · 0 评论 -
LeetCode204.计数质数(Java+三种方法)
统计所有小于非负整数 n 的质数的数量。原创 2020-12-09 17:54:25 · 390 阅读 · 0 评论 -
LeetCode1385.两个数组间的距离值(Java暴力+二分)
给你两个整数数组 arr1 , arr2 和一个整数 d ,请你返回两个数组之间的 距离值 。「距离值」 定义为符合此距离要求的元素数目:对于元素 arr1[i] ,不存在任何元素 arr2[j] 满足 |arr1[i]-arr2[j]| <= d 。输入:arr1 = [4,5,8], arr2 = [10,9,1,8], d = 2输出:2解释:对于 arr1[0]=4 我们有:|4-10|=6 > d=2|4-9|=5 > d=2|4-1|=3 > d=2|4原创 2020-12-09 17:25:17 · 328 阅读 · 0 评论 -
LeetCode1619.删除某些元素后的数组均值(Java)
给你一个整数数组 arr ,请你删除最小 5% 的数字和最大 5% 的数字后,剩余数字的平均值。与 标准答案 误差在 10-5 的结果都被视为正确结果。原创 2020-12-08 22:31:31 · 266 阅读 · 0 评论