LeetCode
文章平均质量分 78
呦柚子
这个作者很懒,什么都没留下…
展开
-
leetcode — 1245.树的直径
链接:树的直径__牛客网给定一棵树,求出这棵树的直径,即树上最远两点的距离。包含n个结点,n-1条边的连通图称为树。示例1的树如下图所示。其中4到5之间的路径最长,是树的直径,距离为5+2+4=11输入6,[[0,1],[1,5],[1,2],[2,3],[2,4]],[3,4,2,1,5]输出11...原创 2021-09-24 21:24:42 · 1041 阅读 · 2 评论 -
leetcode — 103. 二叉树的锯齿形层序遍历(102、107)
给定一个二叉树,返回其节点值的锯齿形层序遍历(之字形)。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回锯齿形层序遍历如下:[ [3], [20,9], [15,7]]方法一:广度优先遍历此题是「102. 二叉树的层序遍历」的变种,最后输出的要求有所变化。...原创 2021-09-13 17:42:24 · 68 阅读 · 0 评论 -
leetcode — 234. 回文链表
给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false。示例 1:输入:head = [1,2,2,1]输出:true示例 2:输入:head = [1,2]输出:false提示:链表中节点数目在范围[1, 105]内 0 <= Node.val <= 9进阶:你能否用O(n)时间复杂度和O(1)空间复杂度解决此题?方法一:将值复制到数组中后用双指针法复制链表值到数组...原创 2021-09-07 17:38:34 · 229 阅读 · 0 评论 -
leetcode — 125. 验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true解释:"amanaplanacanalpanama" 是回文串示例 2:输入: "race a car"输出: false解释:"raceacar" 不是回文串提示:1 <= s.length <= 2 * 105 字符串s..原创 2021-09-07 15:55:21 · 272 阅读 · 0 评论 -
leetcode — 二叉树的层序遍历 I & II
二叉树层序遍历 II 102给你一个二叉树,请你返回其按层序遍历得到的节点值。 (即逐层地,从左到右访问所有节点)。// Definition for a binary tree node.public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {} TreeNode(int val) { this.val = val; } Tr...原创 2021-09-02 16:41:41 · 154 阅读 · 0 评论 -
leetcode — 33. 搜索旋转排序数组
整数数组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]。给你旋转后的数组nums和一...原创 2021-09-01 22:42:16 · 158 阅读 · 0 评论 -
leetcode — 46. 全排列(不含重复数字)
给定一个不含重复数字的数组nums,返回其所有可能的全排列。你可以按任意顺序返回答案。示例 1:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2:输入:nums = [0,1]输出:[[0,1],[1,0]]示例 3:输入:nums = [1]输出:[[1]]提示:1 <= nums.length <= 6 -10 <= nums...原创 2021-08-30 22:25:13 · 2417 阅读 · 0 评论 -
leetcode — 827. 最大人工岛
给你一个大小为n x n二进制矩阵grid。最多只能将一格0变成1。返回执行此操作后,grid中最大的岛屿面积是多少?岛屿由一组上、下、左、右四个方向相连的1形成。示例 1:输入: grid = [[1, 0], [0, 1]]输出: 3解释: 将一格0变成1,最终连通两个小岛得到面积为 3 的岛屿。示例 2:输入: grid = [[1, 1], [1, 0]]输出: 4解释: 将一格0变成1,岛屿的面积扩大为 4。示例 3:输入:...原创 2021-08-30 17:07:16 · 275 阅读 · 0 评论 -
leetcode — 695. 岛屿的最大面积
给定一个包含了一些0和1的非空二维数组grid。一个岛屿是由一些相邻的1(代表土地) 构成的组合,这里的「相邻」要求两个1必须在水平或者竖直方向上相邻。你可以假设grid的四个边缘都被0(代表水)包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。)示例 1:[[0,0,1,0,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,1,1,1,0,0,0], [0,1,1,0,1,0,0,0,0,0,0,0,0]...原创 2021-08-30 10:53:24 · 126 阅读 · 0 评论 -
leetcode — 470. 用 Rand7() 实现 Rand10()
已有方法rand7可生成 1 到 7 范围内的均匀随机整数,试写一个方法rand10生成 1 到 10 范围内的均匀随机整数。不要使用系统的Math.random()方法。示例 1:输入: 1输出: [7]示例 2:输入: 2输出: [8,4]示例 3:输入: 3输出: [8,1,10]提示:rand7已定义。 传入参数:n表示rand10的调用次数。进阶:rand7()调用次数的期望值是多少? 你能...原创 2021-08-29 22:12:28 · 297 阅读 · 0 评论 -
leetcode — 两数之和II
给定一个无序数组和一个目标值,找出数组中两个数之和等于目标值的所有组合,并指出其时间复杂度。例:数组arr = [3,5,3,5],目标值是8。以结果是否可以重复为根本,分为3种情况。1、可完全重复。结果为 [0, 1] [0, 3] [1, 2] [2,3],共4种下标组合。嵌套遍历。时间复杂度:O(n^2)。 哈希法。键存数组元素值,值存出现次数。时间复杂度:O(n)。 排序+双指针夹逼。时间复杂度:O(nlogn)。2、半重复。结果为 [0, 1] [2,3],或 [...原创 2021-08-28 16:01:37 · 157 阅读 · 0 评论 -
leetcode — 面试题 17.24. 最大子矩阵
面试题 17.24. 最大子矩阵给定一个正整数、负整数和 0 组成的 N × M矩阵,编写代码找出元素总和最大的子矩阵。返回一个数组[r1, c1, r2, c2](最大子矩阵的和),其中r1,c1分别代表子矩阵左上角的行号和列号,r2,c2分别代表右下角的行号和列号。若有多个满足条件的子矩阵,返回任意一个均可。注意:本题相对书上原题稍作改动示例:输入:[ [-1,0], [0,-1]]输出:[0,1,0,1]解释:输入中标粗的元素即为输出所表示的矩阵...原创 2021-08-27 22:25:55 · 516 阅读 · 2 评论 -
leetcode — 53. 最大子序和
给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组[4,-1,2,1] 的和最大,为6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [0]输出:0示例 4:输入:nums = [-1]输出:-1示例 5:输入:nums = [-100000...原创 2021-08-27 22:20:40 · 92 阅读 · 0 评论 -
leetcode — 97. 交错字符串
给定三个字符串s1、s2、s3,请你帮忙验证s3是否是由s1和s2交错组成的。两个字符串s和t交错的定义与过程如下,其中每个字符串都会被分割成若干非空子字符串:s = s1+ s2+ ... + sn t = t1+ t2+ ... + tm |n - m| <= 1 交错是s1+ t1+ s2+ t2+ s3+ t3+ ...或者t1+ s1+ t2+ s2+ t3+ s3+ ...提示:a + b意味着字符...原创 2021-08-27 21:13:29 · 248 阅读 · 1 评论 -
leetcode — 字符串筛选(牛客小米)
链接:https://www.nowcoder.com/questionTerminal/511e2634cddc4195890916654286d28e给定一个长度为nnn字符串, 需要去除所有之前曾经出现过的字符,只保留第一次出现的字符输入"aab"输出"ab"说明删除了第二个a输入"hellowelcometoxiaomi"输出"helowcmtxia"说明只保留了第一次出现的字符备注:1000001≤n≤100000原创 2021-08-25 22:22:07 · 267 阅读 · 0 评论 -
[贝壳找房] 0813笔试 3
给出一个大小为n的数组 a 和整数 t,定义区间 [l, r] (0<=l<r<=n-1),若存在下标i、j (1<=i <= j <= r)属于区间[l,r] ,且 a[i] ^a[j] = t,那么称 [l, r] 是非奇特区间,如不存在,则 [l, r] 是奇特区间。求a数组里的奇特区间个数。——> (可以与查找数组中是否两数之和等于target相等题目相对应,将键值对合理存储)输入[2, 4, 8], 6输出1先验:...原创 2021-08-17 16:42:30 · 388 阅读 · 1 评论 -
leetcode — 652. 寻找重复的子树
给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。两棵树重复是指它们具有相同的结构以及相同的结点值。示例 1: 1 / \ 2 3 / / \ 4 2 4 / 4下面是两个重复的子树: 2 / 4和 4因此,你需要以列表的形式返回上述重复子树的根结点。题目给出了一棵二叉树 返回树中原创 2021-08-15 16:00:54 · 245 阅读 · 0 评论 -
leetcode — 463. 岛屿的周长
给定一个row x col的二维网格地图grid,其中:grid[i][j] = 1表示陆地,grid[i][j] = 0表示水域。网格中的格子水平和垂直方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。示例 1:输入:grid = [...原创 2021-08-12 15:03:45 · 206 阅读 · 0 评论 -
leetcode — 48. 旋转图像
给定一个n×n的二维矩阵matrix表示一个图像。请你将图像顺时针旋转 90 度。你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[[7,4,1],[8,5,2],[9,6,3]]示例 2:输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]输出:[[1...转载 2021-08-12 10:14:13 · 59 阅读 · 0 评论 -
leetcode — 117. 填充每个节点的下一个右侧节点指针 II
给定一个二叉树struct Node { int val; Node *left; Node *right; Node *next;}/*// Definition for a Node.class Node { public int val; public Node left; public Node right; public Node next; public Node() {} public Node(in原创 2021-08-10 21:15:22 · 133 阅读 · 0 评论 -
leetcode — 116. 填充每个节点的下一个右侧节点指针 I
给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node { int val; Node *left; Node *right; Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为NULL。初始状态下,所有next 指针都被设置为NULL。进阶:你只能使用常量级额外空间。 使用递归解题...原创 2021-08-09 22:12:22 · 86 阅读 · 0 评论 -
leetcode — 200. 岛屿数量
给你一个由'1'(陆地)和'0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和 / 或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:grid = [ ["1","1","1","1","0"], ["1","1","0","1","0"], ["1","1","0","0","0"], ["0","0","0","0","0"]]输出:1...原创 2021-08-07 16:43:13 · 664 阅读 · 0 评论 -
剑指 Offer 03. 数组中重复的数字
找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3 限制:2 <= n <= 100000方法一:哈希表 / Set利用数据结构特点,容易想到使用哈希表(Set)记录数组的各个数字,当查找到重复数字则直接返回。算...原创 2021-08-07 15:30:24 · 182 阅读 · 0 评论 -
leetcode — 137. 只出现一次的数字 II(1+3)
(剑指 Offer II 004. 只出现一次的数字)给你一个整数数组nums,除某个元素仅出现一次外,其余每个元素都恰出现三次 。请你找出并返回那个只出现了一次的元素。示例 1:输入:nums = [2,2,3,2]输出:3示例 2:输入:nums = [0,1,0,1,0,1,100]输出:100提示:1 <= nums.length <= 3 * 104 -231<= nums[i] <= 231- 1 nums中,除...原创 2021-08-06 22:23:12 · 178 阅读 · 0 评论 -
leetcode — 316. 去除重复字母 (1081. 不同字符的最小子序列)
给你一个字符串s,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证返回结果的字典序最小(要求不能打乱其他字符的相对位置)。注意:该题与 1081https://leetcode-cn.com/problems/smallest-subsequence-of-distinct-characters相同示例 1:输入:s = "bcabc"输出:"abc"示例 2:输入:s = "cbacdcbc"输出:"acdb"提示:1 <= s.length...原创 2021-08-02 16:15:51 · 372 阅读 · 0 评论 -
leetcode — 402. 移掉 K 位数字
给你一个以字符串表示的非负整数num和一个整数k,移除这个数中的k位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。示例 1 :输入:num = "1432219", k = 3输出:"1219"解释:移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219 。示例 2 :输入:num = "10200", k = 1输出:"200"解释:移掉首位的 1 剩下的数字为 200. 注意输出不能有任何前导零。示例 3 :输入:num...原创 2021-08-02 11:54:55 · 399 阅读 · 0 评论 -
leetcode —169. 多数元素
给定一个大小为n的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例1:输入:[3,2,3]输出:3示例2:输入:[2,2,1,1,1,2,2]输出:2进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。class Solution { public int majorityElement(int[] nums) { ...原创 2021-07-30 22:33:32 · 39 阅读 · 0 评论 -
leetcode — 136. 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?除了某个元素只出现一次以外,其余每个元素均出现两次。1、线性时间复杂度:要求代码时间复杂度最高为O(n),不能有嵌套循环等。2、不使用额外空间:要求空间复杂度最高为O(1)。示例 1:输入: [2,2,1]输出: 1示例2:输入: [4,1,2,1,2]输出: 4方法一:最直接的方..原创 2021-07-30 14:27:48 · 274 阅读 · 0 评论 -
leetcode — 190. 颠倒二进制位
颠倒给定的 32 位无符号整数的二进制位。提示:请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。 在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的示例 2中,输入表示有符号整数-3,输出表示有符号整数-1073741825。进阶:如果多次调用这个函数,你将如何优化你的算法?示例 1:输入: 0000...原创 2021-07-28 20:41:00 · 184 阅读 · 2 评论 -
leetcode — 面试题 16.01. 交换数字
编写一个函数,不用临时变量,直接交换numbers = [a, b]中a与b的值。示例:输入: numbers = [1,2]输出: [2,1]提示:numbers.length == 2 -2147483647 <= numbers[i] <=2147483647不使用临时变量交换已有两个数字:加法、异或。1、加法操作...原创 2021-07-28 16:05:17 · 182 阅读 · 0 评论 -
leetcode — 123. 买卖股票的最佳时机 III
给定一个数组,它的第i个元素是一支给定的股票在第i天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成两笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例1:输入:prices = [3,3,5,0,0,3,1,4]输出:6解释:在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3 。 随后,在第 7 天(股票价格 = 1)的时候买入,在第 8 ...原创 2021-07-26 22:40:25 · 85 阅读 · 0 评论 -
leetcode — 122. 买卖股票的最佳时机 II
给定一个数组prices,其中prices[i]是一支给定股票第i天的价格。设计一个算法来计算所能获取的最大利润。可以尽可能地完成更多的交易(多次买卖一支股票)。注意:不能同时参与多笔交易(必须在再次购买前出售掉之前的股票)。示例 1:输入: prices = [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 随后,在第 4 天(股票价...原创 2021-07-26 21:37:14 · 80 阅读 · 0 评论 -
leetcode — 121. 买卖股票的最佳时机
给定一个数组prices,它的第i个元素prices[i]表示一支给定股票第i天的价格。你只能选择某一天买入这只股票,并选择在未来的某一个不同的日子卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回0。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,...原创 2021-07-26 17:21:29 · 136 阅读 · 0 评论 -
leetcode — 461. 汉明距离 Hamming Distance
两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给定两个整数x和y,计算并返回它们之间的汉明距离。示例 1:输入:x = 1, y = 4输出:2解释:1 (0 0 0 1)4 (0 1 0 0) ↑ ↑上面的箭头指出了对应二进制位不同的位置。示例 2:输入:x = 3, y = 1输出:1提示:0 <=x, y <= 2^31...原创 2021-07-24 15:31:44 · 554 阅读 · 2 评论 -
leetcode — 201. 数字范围按位与
给定两个整数left和right,表示区间[left, right],返回此区间内所有数字按位与的结果(包含left、right端点)。—— 注意超时以及其中简化计算的规律示例 1:输入:left = 5, right = 7输出:4示例 2:输入:left = 0, right = 0输出:0示例 3:输入:left = 1, right = 2147483647输出:0提示:0 <= left <= ri...原创 2021-07-24 11:45:54 · 276 阅读 · 0 评论 -
leetcode — 338. 比特位计数
给定一个非负整数num。对于0 ≤ i ≤ num范围中的每个数字i,计算其二进制数中的 1 的数目并将它们作为数组返回。示例 1:输入: 2输出: [0,1,1]示例2:输入: 5输出: [0,1,1,2,1,2]进阶:给出时间复杂度为O(n*sizeof(integer))的解答非常容易。但你可以在线性时间O(n)内用一趟扫描做到吗? 要求算法的空间复杂度为O(n)。 你能进一步完善解法吗?要求在C++或任何其他语言中不使用任何内置函数(如 C++ 中的...原创 2021-07-23 22:37:03 · 210 阅读 · 0 评论 -
leetcode — 231. 2的幂
给一个整数n,请判断该整数是否是 2 的幂次方。如果是,返回true;否则,返回false。如果存在一个整数x使得,则认为n是 2 的幂次方。示例 1:输入:n = 1输出:true解释:20 = 1示例 2:输入:n = 16输出:true解释:24 = 16示例 3:输入:n = 3输出:false示例 4:输入:n = 4输出:true示例 5:输入:n = 5输出:false提示:进阶:你能...原创 2021-07-23 20:38:14 · 104 阅读 · 0 评论 -
leetcode — 191. 位1的个数
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量)。提示:请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。 在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在示例 3中,输入表示有符号整数-3。示例 1:输入:000000000000000000..转载 2021-07-23 16:20:06 · 95 阅读 · 0 评论 -
leetcode — 31. 下一个排列
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。示例 1:输入:nums = [1,2,3]输出:[1,3,2]示例 2:输入:nums = [3,2,1]输出:[1,2,3]示例 3:输入:nums = [1,1,5]输出:[1,5,1]示例 4:输入:nums = [1]输出:[1]提...转载 2021-07-22 16:41:10 · 59 阅读 · 0 评论 -
leetcode — 72. 编辑距离
给你两个单词word1和word2,请你计算出将word1转换成word2所使用的最少操作数。你可以对一个单词进行如下三种操作:插入一个字符 删除一个字符 替换一个字符示例1:输入:word1 = "horse", word2 = "ros"输出:3解释:horse -> rorse (将 'h' 替换为 'r')rorse -> rose (删除 'r')rose -> ros (删除 'e')示例2:输入:word1 = "...原创 2021-07-21 21:01:22 · 404 阅读 · 2 评论