leetcode题解
Novice-XiaoSong
这个作者很懒,什么都没留下…
展开
-
旋转图像
leetcode 48题 [medium]中:旋转图像英:Rotate Image题解11. 思路:从外层到里层一层一层旋转2. 时间复杂度:O(n²)3. 空间复杂度:O(1)4. 实现/** * @param {number[][]} matrix * @return {void} Do not return anything, modify matrix in-place instead. */var rotate = function(matrix) { le.原创 2020-12-19 16:06:17 · 231 阅读 · 1 评论 -
找不同
leetcode 389题 [easy]中:找不同英:Find The Difference题解11. 思路:ASCII,求和,求差两个字符串分别对各ASCII求和计算和值的差值2. 时间复杂度:O(n)3. 空间复杂度:O(1)4. 实现/** * @param {string} s * @param {string} t * @return {character} */var findTheDifference = function(s, t) { let.原创 2020-12-18 18:07:27 · 194 阅读 · 1 评论 -
只出现一次的数字
leetcode 136题 [easy]中:只出现一次的数字英:Single Number题解1. 思路:位运算(异或)a⨁0=aa \bigoplus 0 = aa⨁0=a:与0异或,等于原数本身a⨁a=0a \bigoplus a = 0a⨁a=0:自己与自己异或结果为0a⨁b⨁c=a⨁c⨁ba \bigoplus b \bigoplus c = a \bigoplus c \bigoplus ba⨁b⨁c=a⨁c⨁b:异或操作遵循交换律和结合律2. 时间复杂度:O(n)3..原创 2020-12-18 17:36:28 · 183 阅读 · 1 评论 -
字母异位词分组
leetcode 49题 [medium]中:字母异位词分组英:Group Anagrams一、题解11. 思路:排序(字典序)2. 时间复杂度:O(n * mlogm) n: 数组长度,m: 字符串最大长度3. 空间复杂度:O(n * k) n: 数组长度,k: 字符串平均长度4. 实现/** * @param {string[]} strs * @return {string[][]} */var groupAnagrams = function(strs) { //.原创 2020-12-14 23:10:21 · 211 阅读 · 0 评论 -
数组中出现次数超过一半的数字
剑指Offer 39 数组中出现次数超过一半的数字 [easy]一、题解11. 思路:hash字典hash 字典统计数量,数量大于数组长度一半时返回结果2. 时间复杂度:O(n)3. 空间复杂度:O(n)二、题解21. 思路:排序排序排序后的中位数一定是的结果2. 时间复杂度:O(nlogn)3. 空间复杂度:O(logn) 排序递归栈空间4. 实现/** * @param {number[]} nums * @return {number} */var ma.原创 2020-12-13 11:47:16 · 154 阅读 · 1 评论 -
二进制中1的个数
剑指Offer 15 二进制中1的个数 [easy]一、题解11. 思路对数字循环进行取模(奇偶判断)和除以2(无符号右移)的操作使用位运算加快运算速度2. 时间复杂度:O(logn) 其实就是二进制数的位数log2n+1log_2n + 1log2n+13. 空间复杂度:O(1)4. 实现/** * @param {number} n - a positive integer * @return {number} */var hammingWeight = funct.原创 2020-12-13 10:49:15 · 171 阅读 · 0 评论 -
LRU 缓存机制
leetcode 146题 [medium]中:LRU 缓存机制英:LRU Cache题解1. 思路使用双向链表,链表头为下一次需要剔除出缓存的数据,尾部为最近操作过的数据。(使得put为O(1)的时间复杂度)LRU未满,直接尾部添加新元素LRU满,删除头节点,尾部新增新数据使用原生对象(hash),键值对使得数据键与链表节点一一对应(使得get为O(1)的时间复杂度)访问LRU,借助hash获取到相应的链表结点,借助链表的双向指针更新链表数据顺序2. 时间复杂度:.原创 2020-12-09 12:11:57 · 368 阅读 · 1 评论 -
将数组拆分成斐波那契序列
leetcode 842题 [medium]中:将数组拆分成斐波那契序列英:Split Array Into Fibonacci Sequence题解1. 思路(回溯 + 剪枝)其实主要就是确定斐波那契数列的第1、2个数,后边的相应就确定了2. 时间复杂度:O(n²)3. 空间复杂度:O(n) 记录结果4. 实现/** * @param {string} S * @return {number[]} */var splitIntoFibonacci = funct.原创 2020-12-08 11:58:54 · 274 阅读 · 0 评论 -
最大交换
leetcode 670 [medium]中:最大交换英:Maximum Swap题解1. 思路(栈 + 贪心)从末尾遍历num各位,若当前元素比栈顶元素大(空栈直接入栈),入栈。直到num头或者当前位为9。从起始遍历num各位,比较当前位于栈顶元素的大小和位置关系(1)若当前元素比栈顶元素小,且满足当前元素在高位,栈顶元素在低位,则交换,返回结果;(2)若不满足高低位关系,则栈顶元素出栈,继续比较;(3)若栈为空,说明无需交换;2. 时间复杂度:O(n)3. 空间复杂度:O.原创 2020-12-07 19:46:26 · 360 阅读 · 0 评论 -
旋转数组的最小数字
剑指Offer 11 [easy]题解1. 思路:二分法找右侧比numbers[0]小的左边界2. 时间复杂度:O(logn)3. 空间复杂度:O(1)4. 实现/** * @param {number[]} numbers * @return {number} */var minArray = function(numbers) { // 预处理 if(numbers.length <= 1) return numbers[0]; // 二分.原创 2020-12-07 12:22:11 · 113 阅读 · 0 评论 -
青蛙跳台阶问题
剑指 Offer 10 [easy]题解1. 思路:动态规划状态转移方程:dp[n] = dp[n-1] + dp[n-2]从终点开始考虑。青蛙最后一次跳1步的情况:情况数 = 有 n-1 阶台阶的情况青蛙最后一次跳2步的情况:情况数 = 有 n-2 阶台阶的情况dp[0] = 1, dp[1] = 12. 时间复杂度:O(n)3. 空间复杂度:O(1)4. 实现/** * @param {number} n * @return {number} */.原创 2020-12-07 11:34:55 · 136 阅读 · 0 评论 -
翻转矩阵后的得分
leetcode 861 [medium]中:翻转矩阵后的得分英:Score After Flipping Matrix题解1. 思路:贪心旋转行使得第一列全为1旋转列使得每列1最多2. 时间复杂度:O(n * m)n: 行数;m:列数第一次遍历完成 “旋转行使得第一列全为1”;同时统计每一列1的个数第二次遍历完成 “旋转列使得每列1最多”3. 空间复杂度:O(m)第一次遍历后记录每一列1的个数4. 实现/** * @param {number[][]} A.原创 2020-12-07 10:53:53 · 145 阅读 · 0 评论 -
反转链表
剑指offer 24 反转链表 [easy] 题解1思路:栈时间复杂度:O(n) O(2 * n) 入栈 + 出栈空间复杂度:O(n) 栈空间实现/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } *//** * @param {ListNode} head * @retur.原创 2020-12-06 20:56:14 · 154 阅读 · 0 评论 -
杨辉三角
一、什么是杨辉三角杨辉三角:是二项式系数在三角形中的一种几何排列。杨辉三角的每个数等于它上方两数之和。二、求杨辉三角第n行杨辉三角第n行第m个数的值为组合数 Cn−1m−1C_{n-1}^{m-1}Cn−1m−1 的结果代码leetcode 119题 杨辉三角Ⅱ/** * @param {number} rowIndex * @return {number[]} */var getRow = function(rowIndex) { /** * 数原创 2020-12-06 11:48:58 · 236 阅读 · 0 评论 -
移掉K位数字
leetcode 402题 [medium]中:移掉K位数字英:Remove K Digits题解算法思路(1)数字的大小是由高位(百位相对于十、个位为高位)决定的,所以我们考虑从左到右扫描删除num中的数字;(2)当我们删除num中的某一位时,下一位将会代替该位,而要使得最后的数值最小,那么删除位应当具有以下特征:替换位要比删除位小算法步骤(1)从左到右扫描每一位数字,若当前数字比前一数字小,则删除前一数字;删除后,当前数字继续与前一数字比较,直到当前数字比前一数字大或者前一.原创 2020-12-02 16:02:01 · 160 阅读 · 0 评论 -
在排序数组中查找元素的第一个和最后一个位置
leetcode 34题 [medium]中:在排序数组中查找元素的第一个和最后一个位置英:Find First And Last Position Of Element In Sorted Array题解两次(边界)二分查找(二分查找详解可以看看这篇博客)时间复杂度:O(logn)空间复杂度:O(1)实现/** * @param {number[]} nums * @param {number} target * @return {number[]} */v.原创 2020-12-01 11:47:03 · 116 阅读 · 0 评论 -
重构字符串
leetcode 767题 [medium]中:英:题解判断是否具有重构字符串(1)统计字符串中的最大字符重复数 most(2)当且仅当 剩余字符(S.length - most) 无法填满 重复字符形成的间隔(most - 1) 时,重构不可行构建重构字符串(1)统计字符串中最大字符重复数时会构建一个查询字典,键为字符,值为字符串中该字符出现的次数(2)使用具有最大重复数的字符形成的重复字符串为基串(3)依次将每一种剩余字符插入到基串字符单元后(4)到达基串末尾,若还有剩.原创 2020-11-30 13:52:05 · 175 阅读 · 0 评论 -
三角形的最大周长
leetcode 976题 [easy]中:三角形的最大周长英:Largest Perimeter Triangle题解1全排序 + 贪心时间复杂度:O(nlogn) 排序开销空间复杂度:O(logn) 快排递归栈开销实现/** * @param {number[]} A * @return {number} */var largestPerimeter = function(A) { // 预处理(无) // 排序 A.sort((a.原创 2020-11-29 11:44:55 · 180 阅读 · 0 评论 -
翻转对
leetcode 493题 [hard]中:翻转对英:Reverse Pairs题解1:归并法假设当前两个子序列都排好序且统计了翻转对数量,那么对这两个子序列合并只需要再统计 nums[i] 在左子序列,nums[j] 在右子序列的翻转对数即可。(递归归并思想)子序列排序的目的:优化翻转对的计算,具体可见代码注释时间复杂度:O(nlogn)(归并法分割开销 O(logn))* [(子序列计算翻转对开销 O(n))+ (子序列排序开销 O(n))] => O(nlogn.原创 2020-11-28 13:04:22 · 167 阅读 · 0 评论 -
四数相加 II
leetcode 454题 [medium]中:四数相加 II英:4Sum II题解四数之和问题 转为 两个两数之和的求和问题(1)将四个数组分为两组,每组两个数组。对于每组的两个数组,分别记录其求和的各种和值及相应的组合数。(2)最后问题就转为,对这两个求和记录再次进行求和,记录使得求和结果为0的组合数。优化(1)只需记录一个组合的结果即可,另一个组合直接在遍历构建的过程中使用第一个组合的结果进行和零的判断(2)第一个组合的键直接记录和值的相反数(3)使用 Map 代替 .原创 2020-11-27 17:23:36 · 270 阅读 · 0 评论 -
为运算表达式设计优先级
leetcode 241题 [medium]中:为运算表达式设计优先级英:Different Ways to Add Parentheses题解核心:递归分治 + 记事本优化实现/** * @param {string} input * @return {number[]} */var diffWaysToCompute = function(input) { /** * 递归分治法 + 记事本优化 */ // 预处理 -- 无 .原创 2020-11-26 19:38:52 · 132 阅读 · 0 评论 -
最小高度树
leetcode 310 题 [medium]中:最小高度树英: Minimum Height Trees题解核心:拓扑排序法时间复杂度:O(n*minH)空间复杂度:O(n)/** * @param {number} n * @param {number[][]} edges * @return {number[]} */var findMinHeightTrees = function(n, edges) { /** * 拓扑排序法 * 步骤.原创 2020-11-25 12:50:00 · 294 阅读 · 0 评论 -
完全二叉树的节点个数
leetcode 222 题 [medium]中:完全二叉树的节点个数英:Count Complete Tree Nodes题解一:使用DFS或BFS可以之间简单的解决这道题实现:DFS + 优化(提前结束递归)/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } .原创 2020-11-24 12:11:45 · 316 阅读 · 0 评论 -
算法 从中序与后序遍历序列构造二叉树
leetcode 106 题 [medium]中:从中序与后序遍历序列构造二叉树英:Construct Binary Tree from Inorder and Postorder Traversal切题口(1)postorder: 从右到左递归存放着,当前root, 右子树的root,左子树的root(2)inorder: 当前的root能对数组左右区域进行划分,左侧为左子树结点,右侧为右子树结点(3)从右到左搜索postorder,依次获得当前root、右子树root、右子树的右子.原创 2020-11-07 14:37:46 · 205 阅读 · 0 评论 -
算法 从前序与中序遍历序列构造二叉树
leetcode 105 题 [medium]中:从前序与中序遍历序列构造二叉树英:Construct Binary Tree from Preorder and Inorder Traversal 切题口(1)inorder: 从左到右递归存放着,当前root, 左子树的root,右子树的root(2)preorder: 当前的root能对数组左右区域进行划分,左侧为左子树结点,右侧为右子树结点(3)从左到右搜索preorder,依次获得当前root、左子树root、左子树的左子树的.原创 2020-11-07 14:28:05 · 139 阅读 · 0 评论