随笔分类 - leetcode
摘要:208. 实现 Trie (前缀树) 题目: Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。 请你实现 Trie 类: Trie() 初始化前缀树对象。void insert(Str
阅读全文
摘要:200. 岛屿数量 题目: 给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外,你可以假设该网格的四条边均被水包围。 示例 1: 输入:grid = [ ["1","1","1
阅读全文
摘要:169. 多数元素 题目: 给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入:[3,2,3] 输出:3 思路: 使用计数器统计相同元素出现的个数,如果--count
阅读全文
摘要:155. 最小栈 题目: 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top(
阅读全文
摘要:152. 乘积最大子数组 题目: 给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。 测试用例的答案是一个 32-位 整数。 子数组 是数组的连续子序列。 示例: 输入: nums = [2,3,-2,4] 输出: 6 解
阅读全文
摘要:139. 单词拆分 题目: 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 输入: s = "leetcode", wordDict = ["leet", "
阅读全文
摘要:128. 最长连续序列 题目: 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入:nums = [100,4,200,1,3,2]输出:4解释:最长数字连续序列是 [1,
阅读全文
摘要:101. 对称二叉树 题目: 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 思路1: 递归,根节点的左右子树相同,左子树的左子树和右子树的右子树相同,左子树的右子树和右子树的左子树相同即可 class Solution { publi
阅读全文
摘要:题目: 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。 示例 1: 输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
阅读全文
摘要:labuladong讲解 37. 解数独(困难) 题目: 数独部分空格内已填入了数字,空白格用 '.' 表示。 思路: 输入是一个9x9的棋盘,空白格子用点号字符 . 表示,算法需要在原地修改棋盘,将空白格子填上数字,得到一个可行解。 当 col 到达超过每一行的最后一个索引时,转为增加 row 开
阅读全文
摘要:77. 组合(中等) 题目: 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 输入:n = 4, k = 2 * 输出: * [ * [2,4], * [3,4], * [2,3], * [1,2], * [1,3], * [1,4], *
阅读全文
摘要:labuladong讲解 698. 划分为k个相等的子集(中等) 题目: 给你输入一个数组 nums 和一个正整数 k,请你判断 nums 是否能够被平分为元素和相同的 k 个子集。 思路: 我们切换到这 n 个数字的视角,每个数字都要选择进入到 k 个桶中的某一个。 使用递归,每次选择一个数,然后
阅读全文
摘要:labuladong讲解 46. 全排列(中等) 题目: 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2
阅读全文
摘要:labuladong讲解 134. 加油站(中等) 题目: 思路: 就是每到达一个站点i,可以加gas[i]升油,但离开站点i需要消耗cost[i]升油,问你从哪个站点出发,可以兜一圈回来 汽车进入站点i可以加gas[i]的油,离开站点会损耗cost[i]的油,那么可以把站点和与其相连的路看做一个整
阅读全文
摘要:labuladong讲解 1024. 视频拼接(中等) 题目: 思路: 给定一个目标区间和若干小区间,如何通过裁剪和组合小区间拼凑出目标区间?最少需要几个小区间? 这道题的以下两个特点: 1、要用若干短视频凑出完成视频[0, T],至少得有一个短视频的起点是 0。 这个很好理解,如果没有一个短视频是
阅读全文
摘要:labuladong讲解扫描线技巧 252. 会议室 题目: 给定一个会议时间安排的数组 intervals ,每个会议时间都会包括开始和结束的时间 intervals[i] = [starti, endi] ,请你判断一个人是否能够参加这里面的全部会议。 示例 1: 输入:intervals =
阅读全文
摘要:labuladong讲解 787. K 站中转内最便宜的航班(中等) 题目: 现在有 n 个城市,分别用 0, 1…, n - 1 这些序号表示,城市之间的航线用三元组 [from, to, price] 来表示,比如说三元组 [0,1,100] 就表示,从城市 0 到城市 1 之间的机票价格是 1
阅读全文
摘要:174. 地下城游戏(困难) 题目: 输入一个存储着整数的二维数组 grid,如果 grid[i][j] > 0,说明这个格子装着血瓶,经过它可以增加对应的生命值;如果 grid[i][j] == 0,则这是一个空格子,经过它不会发生任何事情;如果 grid[i][j] < 0,说明这个格子有怪物,
阅读全文
摘要:labuladong讲解 64. 最小路径和(中等) 题目: 现在给你输入一个二维数组 grid,其中的元素都是非负整数,现在你站在左上角,只能向右或者向下移动,需要到达右下角。现在请你计算,经过的路径和最小是多少? 思路: 从左上角位置 (0, 0) 走到位置 (i, j) 的最小路径和为 dp[
阅读全文
摘要:labuladong讲解 53. 最大子序和(简单) 题目: 给你输入一个整数数组 nums,请你找在其中找一个和最大的子数组,返回这个子数组的和。 比如说输入 nums = [-3,1,3,-1,2,-4,2],算法返回 5,因为最大子数组 [1,3,-1,2] 的和为 5。 思路: 定义dp[i
阅读全文