随笔分类 - LeetCode
摘要:题目描述: 给定一个大小为 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]
阅读全文

浙公网安备 33010602011771号