随笔分类 - 算法和数据结构
摘要:快速求完全二叉树的节点个数 作者:Grey 原文地址: 博客园:快速求完全二叉树的节点个数 CSDN:快速求完全二叉树的节点个数 题目链接 LeetCode 222. 完全二叉树的节点个数 题目进阶要求 **进阶:**遍历树来统计节点是一种时间复杂度为 O(n) 的简单解决方案。你可以设计一个更快的
阅读全文
摘要:二叉树的按层遍历相关问题 作者:Grey 原文地址: 博客园:二叉树的按层遍历相关问题 CSDN:二叉树的按层遍历相关问题 说明 本文主要介绍了二叉树的按层遍历。并且分别用如下三种方式实现: 哈希表结合 LinkedList 使用系统自带的 LinkedList 自定义队列 以上方法只是空间复杂度有
阅读全文
摘要:有效括号匹配问题 作者: Grey 原文地址: 博客园:有效括号匹配问题 CSDN:有效括号匹配问题 LeetCode 20. 有效的括号 主要思路 使用一个栈,然后开始遍历整个序列,入栈和出栈规则如下: 遇到左括号入栈 遇到右括号,从栈里先弹出一个元素,如果弹出的元素和这个右括号正好匹配,则继续,
阅读全文
摘要:使用并查集解决的相关问题 作者: Grey 原文地址: 博客园:使用并查集解决的相关问题 CSDN:使用并查集解决的相关问题 关于并查集的说明,见如下博客: 使用并查集处理集合的合并和查询问题 相关题目 LeetCode 200. 岛屿数量 本题的解题思路参考博客 使用DFS和并查集方法解决岛问题
阅读全文
摘要:使用并查集处理集合的合并和查询问题 作者:Grey 原文地址: 博客园:使用并查集处理集合的合并和查询问题 CSDN:使用并查集处理集合的合并和查询问题 要解决的问题 有若干个样本a、b、c、d…,假设类型都是V,在并查集中一开始认为每个样本都在单独的集合里,用户可以在任何时候调用如下两个方法 :
阅读全文
摘要:超级洗衣机问题 作者:Grey 原文地址: 博客园:超级洗衣机问题 CSDN:超级洗衣机问题 题目链接:LeetCode 517. 超级洗衣机问题 主要思路 有两个显而易见的结论: 假设所有衣服的数量之和是sum,如果sum % N != 0,则无论如何都无法做到让所有洗衣机平分衣服。 假设洗衣机的
阅读全文
摘要:正则表达式匹配问题 作者:Grey 原文链接: 博客园:正则表达式匹配问题 CSDN:正则表达式匹配问题 问题链接 LeetCode 10. 正则表达式匹配 暴力解法 先过滤掉无效参数,比如: 在s串中,不能有.和*两个字符, 在p串中,两个*不能相邻,*不能出现在p串的开始位置。 以上两种情况下,
阅读全文
摘要:子数组或者子矩阵的最大累加和问题 作者:Grey 原文地址: 博客园:子数组或者子矩阵的最大累加和问题 CSDN:子数组或者子矩阵的最大累加和问题 子数组的最大累加和 题目链接:LeetCode 53. 最大子数组的和 主要思路: 设置dp数组,长度和原始数组一样,dp[i]表示必须以i位置结尾的子
阅读全文
摘要:寻找两个正序数组中的中位数 作者:Grey 原文地址: 博客园:寻找两个正序数组中的中位数 CSDN:寻找两个正序数组中的中位数 题目链接 LeetCode 4. 寻找两个正序数组中的中位数 例如:nums1数组是 [1,2], nums2 数组是 [3,4] 那么这两个数组的合并数组是[1,2,3
阅读全文
摘要:单词搜索系列问题 作者:Grey 原文地址: 博客园:单词搜索系列问题 CSDN:单词搜索系列问题 LeetCode 79. 单词搜索 总体思路是:枚举从board的每个位置开始,看能否走出给定的单词,伪代码如下: for (int i = 0; i < board.length; i++) { f
阅读全文
摘要:买卖股票的最佳时机系列问题 作者:Grey 原文地址: 博客园:买卖股票的最佳时机系列问题 CSDN:买卖股票的最佳时机系列问题 LeetCode 121. 买卖股票的最佳时机 主要思路:因为只有一股可以交易,所以我们可以枚举必须以i位置作为卖出时机的情况下,得到的最大收益是多少。如果我们得到每个i
阅读全文
摘要:最长递增子序列 作者:Grey 原文地址: 博客园:最长递增子序列 CSDN:最长递增子序列 问题描述 LeetCode 300. 最长递增子序列 说明:这里的递增指的是严格递增,相等的时候不算递增。 暴力解法 dp[i]表示: 必须以i位置结尾的最长递增子序列是多少,如果求出了每个位置的dp[i]
阅读全文
摘要:使用加强堆解决 topK 问题 作者:Grey 原文地址: 博客园:使用加强堆解决 topK 问题 CSDN:使用加强堆解决 topK 问题 题目描述 LintCode 550 · Top K Frequent Words II 思路 由于要统计每个字符串的次数,以及字典序,所以,我们需要把用户每次
阅读全文
摘要:判断一个数是否是 Step Sum 作者:Grey 原文地址: 博客园:判断一个数是否是 Step Sum CSDN:判断一个数是否是 Step Sum 题目说明 何为 Step Sum? 比如:680 这个数 680 + 68 + 6 = 754, 所以 680 这个数的 Step Sum 是75
阅读全文
摘要:二叉树的先,中,后序遍历(递归,非递归) 作者:Grey 原文地址: 博客园:二叉树的先,中,后序遍历(递归,非递归) CSDN:二叉树的先,中,后序遍历(递归,非递归) 说明 本文主要介绍了二叉树的先序,中序,后序遍历。并且分别用如下两种方式实现: 递归方法 非递归(使用栈) 示例二叉树 数据结构
阅读全文
摘要:使用线段树解决数组任意区间元素修改问题 作者:Grey 原文地址: 博客园:使用线段树解决数组任意区间元素修改问题 CSDN:使用线段树解决数组任意区间元素修改问题 要解决的问题 数组任意区间内的元素修改,增加,求和,时间复杂度都要达到 $O(logN)$ 水平, 方法说明如下: 在数组 arr 中
阅读全文
摘要:加油站的良好出发点问题 作者:Grey 原文地址: 博客园:加油站的良好出发点问题 CSDN:加油站的良好出发点问题 题目描述 题目链接 思路 暴力解法 O(N^2) 我们可以通过生成辅助数组来验证良好出发点 int[]h 这个数组的长度和cost数组长度一致,且这个数组的每个元素的生成逻辑是: h
阅读全文
摘要:滑动窗口最大值问题 作者:Grey 原文地址: 博客园:滑动窗口最大值问题 CSDN:滑动窗口最大值问题 题目描述 LeetCode 239. 滑动窗口最大值 思路 数组为num, 滑动窗口大小是k,首先两个极端情况: 情况1,如果k=1,则直接返回原数组即可(滑动窗口大小为1,那么每个窗口的最小值
阅读全文
摘要:线段最大重合区域问题 作者:Grey 原文地址: 博客园:线段最大重合区域问题 CSDN:线段最大重合区域问题 题目描述 牛客-线段重合-连接点算重合区域 主要思路 暴力解法 第一步,首先得到所有线段开始位置的最小值(假设为 min)和结束位置的最大值(假设为 max),组成了一个\([min...
阅读全文
摘要:有序表和搜索二叉树 作者: Grey 原文地址: 博客园:有序表和搜索二叉树 CSDN:有序表和搜索二叉树 说明 本文的所有图例见:processon: 有序表和搜索二叉树 搜索二叉树 定义:任何一个节点,左树都比这个节点小,右数都比这个节点大,经典搜索二叉树是没有重复值的,有重复值就压在一起 构造
阅读全文