![](https://img-blog.csdnimg.cn/20190927151026427.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
leetcode
leetcode刷题记录
蒋卫升
这个作者很懒,什么都没留下…
展开
-
leetcode 两数相加(链表 + 模拟)
????/** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) * this.next = (next===undefined ? null : next) * } *//** * @param {ListNode} l1 * @param {ListNode} l2 * @return原创 2021-08-28 17:07:16 · 142 阅读 · 0 评论 -
leetcode 无重复字符的最长子串
题意:给你一个字符串,问你最长的无重复字符的子串有多长?题解:分析:tips: 使用js的用户注意0是falsy值!/** * @param {string} s * @return {number} */var lengthOfLongestSubstring = function(s) { let pre = {}; let mins = 0; let ans = 0; for(let i = 0; i < s.length; i++) {原创 2021-01-25 17:51:02 · 67 阅读 · 0 评论 -
leetcode 918.环形子数组的最大和
题意:给定一个由整数数组 A 表示的环形数组 C,求 C 的非空子数组的最大可能和。子数组要连续!important;题解:因为是环形,所以我们可以分为两种情况讨论包含两段只包含一段对于第一种情况,先求出数组的和,然后再再求出和最小的子数组,用和减去它即可对于第二种情况,我们直接求出和最大的子数组然后二者取最大值即可。和最小的子数组 && 和最大的子数组dp[i]=max(dp[i−1]+a[i],a[i])dp[i] = max(dp[i-1]+a[i], a[i]原创 2020-12-17 11:25:13 · 184 阅读 · 0 评论 -
leetcode 663. 均匀树划分
题意:给定一棵有 n 个结点的二叉树,你的任务是检查是否可以通过去掉树上的一条边将树分成两棵,且这两棵树结点之和相等。题解:树型dp,dp【i】代表i节点和它子树节点的总和,那么,我们先求出dp【root】,然后再判断是否存在某一个点,它的dp【i】= sum - dp【i】。如果有就返回true,否则返回false。/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val;原创 2020-12-08 14:04:36 · 2271 阅读 · 0 评论 -
leetcode 42 接雨水
题目描述:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。题解思路:我们考虑每个柱子上面能接的雨水是由什么决定的,不难得出,每根柱子上能接的雨水是由它左边的最高的柱子和他右边的最高的柱子中的最小值决定的。那么我们可以维护一个前缀最小值和一个后缀最小值,最终我们就可以得出每根柱子上面能接多少雨水,最后把每根柱子上面接的雨水加起来就是最终答案/** * @param {number[]} height * @return {number} */原创 2020-11-16 19:27:33 · 155 阅读 · 0 评论 -
leetcode 15 三数之和 (M)
题目描述:给你一个数组,问有多少个三元组,他们的和为0,返回这些三元组,不包含重复的,比如(1,2,3)与(3,2,1)是同一个三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[[-1, 0, 1],[-1, -1, 2]]题解:首先,如果暴力枚举的话,时间复杂度是:n的三次方。而且还要去重。那么我们可以考虑,是否可以通过排序,让我们找到的三元组的顺序有规律来减少不必要的枚举次数,显然是可行的,我们先把数组按照从小到大的顺序排原创 2020-11-18 19:26:19 · 143 阅读 · 0 评论 -
leetcode 213. 打家劫色II
link题意:有n个房子围成一圈,其中第i个房子里有a[i]个金币,你是一个小偷,如果偷两个连在一起的房子就会报警,问你,如何偷窃可以使得金币最多而且不会被抓。思路:因为这些房间时围成一个圈的,偷了第一个房间,就不能偷最后一个房间。那么我们就分情况讨论,情况一:必偷最后一个房间,情况二:不偷最后一个房间,那么,对于情况一,就相当于移除了第一项和最后两项,变成了题(198 打家劫色),对于情况二,就相当于移除最后一项变成了(198 打家劫色)tips:我感觉它这个题还是不够严谨,因为如果n等于2的时候,原创 2020-11-11 15:33:03 · 193 阅读 · 0 评论 -
leetcode 921使括号有效的最小添加方式
link题意:给你一个只包含"(" 和 ")"两种字符的字符串,问添加多少个字符才能使得这个字符串合法,合法就是每对括号都匹配成功题解:直接匹配,如果匹配成功就继续,如果失败就添加字符串/** * @param {string} S * @return {number} */var minAddToMakeValid = function(s) { let cnt = 0 let ans = 0 for(let i = 0; i < s.length; i++)原创 2020-11-08 16:48:48 · 181 阅读 · 0 评论 -
leetcode 946验证栈序列
link题意:验证一个序列是不是另外一个序列的入栈顺序题解:用双指针分别指向这两个序列的起始位置,把pushed序列加入到栈中,如果此时栈顶元素跟出栈序列中的值相同,就pop出去,移动指针,如果最后有一个序列已经遍历完成,而栈不为空,就说明它不是poped序列的出栈序列/** * @param {number[]} pushed * @param {number[]} popped * @return {boolean} */var validateStackSequences = func原创 2020-11-08 10:51:50 · 215 阅读 · 0 评论 -
leetcode 20 有效括号对 (栈)
link题意:匹配括号题解:栈/** * @param {string} s * @return {boolean} */var isValid = function(s) { let stack = []; for(let i = 0; i < s.length; i++) { if (s[i] == '(' || s[i] == '[' || s[i] == '{'){ stack.push(s[i]); } e原创 2020-11-08 10:25:08 · 146 阅读 · 0 评论 -
leetcode 211 最大正方形
题意:给你一个n*m的矩形,矩形中只包含0,1这两种元素,问这个矩形中全部为1的正方形的面积时多少?题解:设dp[i][j]dp[i][j]dp[i][j]为:以(i,j)(i,j)(i,j)这个位置为终点,能组成正方形的最大边长,那么当(i.j)(i.j)(i.j)这个位置的值为1时,dp[i][j]=min(dp[i−1][[j],dp[i][j−1],dp[i−1][j−1])+1dp[i][j] = min(dp[i-1][[j],dp[i][j-1],dp[i-1][j-1]) + 1dp[原创 2020-11-15 17:28:29 · 112 阅读 · 0 评论 -
leetcode 92 不同分二叉搜索树
题意:问1-n组成的二叉搜索树的种类有多少?题解:设f [ i ] :以 i 为根节点的二叉树种数,设G [ i ] :1 - i 组成的二叉搜索树的种数那么 G [ n ] = f [ 1 ] + f [ 2 ] + f [ 3 ] + ...... + f [ n ]f [ i ] = G [ i - 1] * G [ n - i ]那么:G [ n ] = G [ 0 ] * G [ n - 1] + G [ 1 ] * G [ n - 2] + ......这就是卡特兰数,我们可以用原创 2020-12-03 20:54:40 · 162 阅读 · 0 评论 -
树的层次遍历
题意:给你一颗树,求树的层次遍历题解:dfs | bfsdfs:设置一个变量用来保存树的深度/* * function TreeNode(x) { * this.val = x; * this.left = null; * this.right = null; * } *//** * * @param root TreeNode类 * @return int整型二维数组 */let ans = []function dfs(root,de原创 2020-11-26 15:40:15 · 239 阅读 · 0 评论 -
反转链表
题意:给你一个链表输出反转后的值题解:双指针/*function ListNode(x){ this.val = x; this.next = null;}*/function ReverseList(pHead){ // write code here let p = pHead let q = null let tmp = null while(p != null) { tmp = p p = p.ne原创 2020-11-26 15:25:04 · 148 阅读 · 0 评论 -
leetcode 5. 最长回文子串 (区间dp)
题意:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”题解:dp[i][j](boolean)dp[i][j](boolean)dp[i][j](boolean):代表iii到jjj是否是回文串首先预处理 长度为1,2的子串dp[i][j]dp[i][j]dp[i][j] = (dp[i+1原创 2020-11-24 22:19:37 · 232 阅读 · 0 评论