摘要:
实现一个 LRUCache 类:使得 put 和 get 操作都达到 O(1) 哈希表 + 双向队列 双向队列 中存储 缓存(页面)信息,使用哈希表可以实现O(1) 找到 缓存的位置,使用双向队列可以 实现O(1) 时间的从头部插入(更新刚用过的页为最新状态)和从尾部删除(淘汰最近最久未使用的页)。 阅读全文
摘要:
题目描述: 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 方法一: 回溯 + 剪枝 将 生成 n 对 有效括号的过程就是在一棵剪枝了的二叉树上遍历的过程。下图是 n = 3 的情况。 从上面的图片中我们可以很明显的看到,最后五条画黑线的叶节点就是最终 阅读全文
摘要:
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode() : val(0), left 阅读全文
摘要:
题目描述: 103. 二叉树的锯齿形层次遍历 分析: 本题考察的是二叉树的层次遍历思想。二叉树的层次遍历需要借助一个队列辅助 。算法框架如下: 1 void levelOrderTraverse(TreeNode* root) 2 { 3 queue<TreeNode*> q; 4 //初始状态,先 阅读全文
摘要:
题目描述: 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 分析: 二叉树的题目优先考虑递归解法。设计的递归函数完成两个功能: 1. 求当前二叉树的高度 depth; 这里二叉树的高度指的是二叉树的最 阅读全文
摘要:
题目描述: 给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。 进阶:你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗? 方法1: 总体思路: 同时遍历 num1 和nums2 ,比较num1和nums2中当前 阅读全文
摘要:
题目描述: 给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。要求空间 O( 1 ) 分析: 要求空间 O(1) 意味着必须在给定的 矩阵内通过交换元素的方式原地旋转矩阵。 第一步:分层 总体思路就是 对矩阵从外到内分层(如下图),从最外层环到最内层环逐层旋转。比如 5*5 阅读全文
摘要:
题目描述: 一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1'B' -> 2...'Z' -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。 示例 1: 输入:s = "226"输出:3解释:它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 阅读全文
摘要:
题目描述: 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ? 请你找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 思路分析: 排序 + 双指针 ,本题考察的重难点在于如何去除重复解。算法流程如下 阅读全文
摘要:
参考 [LeetCode] Best Time to Buy and Sell Stock 买卖股票的最佳时间 阅读全文