11 2019 档案
摘要:题目描述: 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。 示例 :给定二叉树 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。 注意:两结点之间的路径长度是以它们之间边的数目表示。 思路分析: 对于每
阅读全文
摘要:题目描述: 给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。 思路分析: 对于所有的数字,只有两类: 奇数:二进制表示中,奇数一定比前面那个偶数多一个 1,因为多的就是最低位的 1。 举例: 0 = 0 1 = 1
阅读全文
摘要:题目描述: 思路分析: (这是一个很经典的树形dp问题) 我们可以先不管这个否是二叉树,我们发现,如果我们选了 cur 这个节点 那么就说明 我们不能选它的所有子节点(还有父节点)。对于每一个节点,都只有选和不选两种情况。我们每次考虑一棵子树,那么根只有两种情况,选和不选(我们让dp[0]表示不选,
阅读全文
摘要:题目描述: 思路:动态规划(https://leetcode-cn.com/problems/coin-change/solution/dong-tai-gui-hua-suan-fa-si-xiang-by-hikes/) 假设你是个土豪,你有1,5,10,20,50,100的钞票,你要凑出666
阅读全文
摘要:题目描述: 你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。 你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。 思路分析: 如果堆中石头的数量 nn 不能被
阅读全文
摘要:题目描述: 给定一个无序的整数数组,找到其中最长上升子序列的长度。 思路分析:(题解来自:https://leetcode-cn.com/u/liweiwei1419/) 动态规划,时间复杂度为 O(N^2); “动态规划”的两个步骤是思考“状态”以及“状态转移方程”。 有的资料又将“动态规划”分为
阅读全文
摘要:题目描述: 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。 思路分析: 关键:这道题的关键是对要定位的“数”做二分,而不是对数组的索引做二分。要定位的“数”根据题意在 1 和
阅读全文
摘要:题目描述: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 思路分析:
阅读全文
摘要:题目描述: 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 思路分析:思路: 动态规划首先初始化长度为n+1的数组dp,每个位置都为0如果n为0,则结果为0对数组进行遍历,下标为i,每次都将当前数字先更新为最
阅读全文
摘要:题目描述: 给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。 说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。 进阶:你可以在常数空间复杂度内完成这个题目吗?(
阅读全文
摘要:题目描述: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉树: root = [
阅读全文
摘要:题目描述: 请判断一个链表是否为回文链表。 思路分析: 思路一:借助辅助栈和辅助队列,链表节点依次入队列和入栈,依次出栈和出队,判断是否相等即可 时间复杂度:O(n) 空间复杂度:O(2n)->O(n) 思路二:快慢指针 思想很简单,用2个指针,一个low,一个fast,fast是low的2倍,所以
阅读全文
摘要:题目描述: 翻转一颗二叉树 思路分析: 1)递归,不断交换左右子树,直到子树为空 2)迭代: 这个方法的思路就是,我们需要交换树中所有节点的左孩子和右孩子。因此可以创一个队列来存储所有左孩子和右孩子还没有被交换过的节点。开始的时候,只有根节点在这个队列里面。只要这个队列不空,就一直从队列中出队节点,
阅读全文
摘要:题目描述: 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 思路分析: 思路一:排序+遍历,如果是升序,那就是返回nums[n-k],如果是降序,那就是返回nums[k-1] 时间复杂度:O(Nlogn) 空间复杂度:O(
阅读全文
摘要:题目描述: 反转一个单链表。 思路分析: 方法一:迭代假设存在链表 1 → 2 → 3 → Ø,我们想要把它改成 Ø ← 1 ← 2 ← 3。 在遍历列表时,将当前节点的 next 指针改为指向前一个元素。由于节点没有引用其上一个节点,因此必须事先存储其前一个元素。在更改引用之前,还需要另一个指针来
阅读全文
摘要:题目描述: 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。 思路分析:题解和示例图来自:liweiwei1419 说明:以下介绍的算法,除了并查集以外,DFS 和 B
阅读全文
摘要:题目描述: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。 思
阅读全文
摘要:题目描述: 给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在众数。 思路分析: 思路一:暴力枚举 时间复杂度:O(n^2) 空间复杂度:O(1) 思路二:Hash,用空间换时间 时间复杂度:O(n) 空
阅读全文
摘要:题目描述 编写一个程序,找到两个单链表相交的起始节点。 如下面的两个链表: 在节点 c1 开始相交。 注意: 如果两个链表没有交点,返回 null.在返回结果后,两个链表仍须保持原有的结构。可假定整个链表结构中没有循环。程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。 思路分析: 大白话
阅读全文
摘要:题目描述: 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) -- 将元素 x 推入栈中。pop() -- 删除栈顶的元素。top() -- 获取栈顶元素。getMin() -- 检索栈中的最小元素。 思路解析: 这道题的思想很简单:“以空间换时间”
阅读全文
摘要:题目描述: 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。 思路分析: 标签:动态规划遍历数组时计算当前最大值,不断更新令imax为当前最大值,则当前最大值为 imax = max(imax * nums[i], nums[i])由于存在负数,那么会导致最
阅读全文
摘要:题目描述: 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 说明:不允许修改给定的链表。 进阶:你是否可以不用额外空间解决
阅读全文
摘要:题目描述: 给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 思路分析: 思路一: 哈希, 空间复杂度O(n) 这个很好考虑, 把遍历过的节点记录,当发现遍历的节点下一
阅读全文
摘要:题目描述: 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。 说明: 拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。 思路分析:动态规划,自底向上, dp[i]表示s到i位置是否可以由wordDic
阅读全文
摘要:恢复内容开始 题目描述: 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 思路分析: 思路一:暴力枚举 思路二:Hash,空间换时间 思路三:异或(两个数异或,相同为0,
阅读全文
摘要:题目描述: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。 注意你不能在买入股票前卖出股票。 代码实现: 一、反向思维 复杂度分析 时间复杂度:O(N) 空间复杂度:O(1) 二、暴力枚
阅读全文
摘要:题目描述: 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 思路分析:递归(二叉树最大深度,等于左右子树的最大深度+1) 代码实现: 一、深度优先比遍历(DFS) 二、层次遍历(BFS,广度优先) 时间复杂度:O(N
阅读全文
摘要:题目描述: 给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。 思路分析: 1.LinkedList作为队列迭代实现 2.递归 代码实现: 一、迭代(LinkedList),队列作为辅助数据结构实现二叉树的层次遍历 【注意】:Java LinkedList add 是加
阅读全文
摘要:题目描述: 给定一个二叉树,检查它是否是镜像对称的。 思路解析: 思路一:对二叉树进行中序遍历,判断节点值是否对称分布(LeetCode测试用例未通过,但本地测试通过) 思路二:递归
阅读全文
摘要:题目描述: 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 思路分析:递归 因为二叉搜索树中序遍历是递增的,所以我们可以中序遍历判断前一数是否小于
阅读全文
摘要:题目描述: 给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种? 思路解析: 动态规划 假设n个节点存在 令G(n)表示从1到n可以形成二叉排序树个数 令f(i)为以i为根的二叉搜索树的个数 即有:G(n) = f(1) + f(2) + f(3) + f(4) + ... +
阅读全文
摘要:题目描述: 给定一个二叉树,返回它的中序遍历。 思路解析: 1)递归:没啥说的,左子树->根->右子树顺序去遍历 2)迭代计算:用栈,再用一个指针模拟访问过程 代码实现: 1)递归 2)迭代: 时间复杂度:O(n)。递归函数 T(n)=2⋅T(n/2)+1。空间复杂度:最坏情况下需要空间O(n)(每
阅读全文
摘要:题目描述: 给定一个二维网格和一个单词,找出该单词是否存在于网格中。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 代码实现:
阅读全文
摘要:题目描述: 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 题目解析:回溯的过程是执行一次深度优先遍历,一条路走到底,走不通的时候,返回回来,继续执行,一直这样下去,直到回到起点。 代码实现:注意空集也是集合的子集 将结果集扩大操作放在循
阅读全文
摘要:题目描述: 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意:不能使用代码库中的排序函数来解决这道题。 进阶:一个直观的解决方案是使用计数排序的
阅读全文
摘要:题目描述: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 代码实现: 递归实现斐波那契数列(报超时,但是一种思路) AC解法:记忆中间计算结果,避免重复计算(动态规划) 本问题其实常规解法可以分
阅读全文
摘要:题目描述: 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 题目解析: 动态规划,用dp[i][j]表示到i,j的最小路径和. 动态方程: dp[i][j] = min(dp[i-1][j], dp[i]
阅读全文
摘要:题目描述: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不同的路径? 例如,上图是一个7 x 3 的网格。有多少可能的路径? 说明:m 和
阅读全文
摘要:题目描述: 给出一个区间的集合,请合并所有重叠的区间。 题目解析: 先按首位置进行排序; 接下来,如何判断两个区间是否重叠呢?比如 a = [1,4],b = [2,3] 当 a[1] >= b[0] 说明两个区间有重叠. 但是如何把这个区间找出来呢? 左边位置一定是确定,就是 a[0],而右边位置
阅读全文
摘要:题目描述: 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 题目解析: 贪心算法: 如果某一个作为起跳点的格子可以跳跃的距离是 3,那么表示后面 3 个格子都可以作为起跳点。可以对每一个能作为起跳点的格子都尝试
阅读全文
摘要:题目描述: 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶: 如果你已经实现复杂度为 O(n) 的解法,
阅读全文
摘要:题目描述: 给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。 说明: 所有输入均为小写字母。不考虑答案输出的顺序。 题目解析: 这道题关键在于,如何找到可以唯一标识具有相同字母并且个数也一样的键,单词按字典顺序排序 代码实现: 时间复杂度:O(NKlogK),其
阅读全文
摘要:题目描述: 给定一个 n × n 的二维矩阵表示一个图像。 将图像顺时针旋转 90 度。 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。 思路解析: 最直接的想法是先转置矩阵(即原矩阵的行变成新矩阵的列,原矩阵的行变成新矩阵的列,满足公式(AT)
阅读全文
摘要:题目描述: 题目解析:来自leetcode@liweiwei1419 以示例输入: [1, 2, 3] 为例,如果让我们手写,要做到不重不漏,我们书写的策略可能是这样:“一位一位确定”,这样说比较笼统,具体是这样的: 1、先写以 1 开始的两个排列:[1, 2, 3]、[1, 3, 2];2、再写以
阅读全文
摘要:题目描述: 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明: 所有数字(包括 target)都是正整数。解集不能包含重复的组合。 示例
阅读全文

浙公网安备 33010602011771号