![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Leetcode
Coder_L2
未经审视的人生不值得度过
展开
-
二刷算法记录
s=s.join(’ ‘)连接会加上空格,因此就直接把所有空格去掉然后再用s=s.join(’ ')加上单词会出现的字符。有两步比较关键:i原创 2022-09-13 21:05:23 · 182 阅读 · 0 评论 -
回溯算法模板
leetcode77从前n个数中挑两个数var combine = function(n, k) { const combineHepler = (n,k,startIndex)=>{ for (let i = startIndex; i <= n-(k-path.length)+1; ++i) { //startIndex开始序列 path.push(i); combineHepler(n, k, i + 1);原创 2022-05-23 10:21:43 · 902 阅读 · 1 评论 -
leetcode701:二叉搜索树的插入操作
思路递归的思路去解决,按二叉搜索树的顺序 遍历遇到空节点插入1.终止条件遍历的节点为空2.单层递归逻辑搜索树是有方向了,可以根据插入元素的数值,决定递归方向JS语言var insertIntoBST = function(root, val) { const SetInorder = function(root, val){ if(!root){ let node = new TreeNode(val); return .原创 2022-05-13 19:25:09 · 181 阅读 · 0 评论 -
leetcode235:二叉搜索树的最近公共祖先
思路因为二叉搜索树是有序的,所以和上一题还是不一样1.确定终止条件遇到空返回2.确定单层递归的逻辑在遍历二叉搜索树的时候就是寻找区间[p->val, q->val](注意这里是左闭又闭)那么如果 cur->val 大于 p->val,同时 cur->val 大于q->val,那么就应该向左遍历(说明目标区间在左子树上)。JS语言var lowestCommonAncestor = function(root, p, q) { const travle原创 2022-05-13 14:10:56 · 111 阅读 · 0 评论 -
leetcode501:二叉搜索树的众数
思路1先存成有序数组然后算众数,这里的小技巧就是遍历的时候加count,能极大缩减时间。计算数组中最多的数,可以用map也尝试一下JS语言var findMode = function(root) { let arr=[] const buildtree = function(root){ if(root){ buildtree(root.left); arr.push(root.val); b.原创 2022-05-11 10:47:08 · 173 阅读 · 0 评论 -
leetcode530:二叉树搜索树的最小绝对值
思路和验证二叉搜索树一样思路先转换为有序数组,然后再算相邻数组值的最小差值JS语言var getMinimumDifference = function(root) { let arr=[] const buildtree = function(root){ if(root){ buildtree(root.left); arr.push(root.val); buildtree(root.right); .原创 2022-05-09 10:38:38 · 218 阅读 · 0 评论 -
Leetcode98:验证二叉搜索树
思路将二叉树变成一个有序数组比较JS语言var isValidBST = function(root) { let arr=[]; const buildtree= function(root){ if(root){ buildtree(root.left); arr.push(root.val);//有序数组 buildtree(root.right); } } buildtre.原创 2022-05-09 10:11:11 · 904 阅读 · 0 评论 -
leetcode700:二叉搜索树的搜索
思路首先介绍一下二叉搜索树二叉搜索树是一个有序树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉搜索树采用递归思路1.终止条件如果root为空,或者找到这个数值了,就返回root节点2.单层递归如果root.val>val,说明val在root左边,于是在左边节点查找反之,如果root.val<val,说明val在root右边,于是在右边节点查找JS语言var .原创 2022-05-08 10:13:39 · 278 阅读 · 0 评论 -
leetcode654:最大二叉树
思路采用递归1.终止条件:遍历到了叶子节点递归停止,此时数组下标left>right2.单层递归:1)要找到数组中最大的值和对应的下标, 最大的值构造根节点,下标用来下一步分割数组。2)左右节点递归。JS语言var constructMaximumBinaryTree = function(nums) { var buildtree= function (arr,left,right){ if(left>right){ return原创 2022-05-07 10:35:56 · 1352 阅读 · 0 评论 -
leetcode106:从中序与后序遍历序列构造二叉树
思路中序:左中右后序:左右中JS语言var buildTree = function(inorder, postorder) { if(!inorder.length) return null; const rootval = postorder.pop();//取后序的最后一个 let rootIndex = inorder.indexOf(rootval);//在中序中排列 const root = new TreeNode(rootval);//中间节点原创 2022-05-06 10:29:37 · 304 阅读 · 0 评论 -
leetcode113:路径总和2
思路和112不同的点在于返回值的变化,仍然用递归的思想终止条件:叶子节点且cnt为0,说明它是路径总和,将path路径存到res,如果cnt不为0,则说明该路径不是JS语言var pathSum = function(root, targetSum) { let res=[]; const travels=function(root,cnt,path){ if(!root.left&& !root.right&&cnt==0){原创 2022-05-05 10:15:13 · 131 阅读 · 0 评论 -
leetcode112:路径总和
思路采用递归1.判断终止条件到达叶子节点且targetSum=0即有一条路径符合,因为最后都减到0了,返回true,否则到达叶子节点但targetSum不为0则返回false)2.确定单层递归如果左节点不为空,就从左边遍历,反之则从右边,有回溯的思想在里面,将左边用回溯的思想写就是这样if (root.left) { // 左targetSum -= root.left.val; // 递归,处理节点;if (traversal(root.left, targetSum)) return t原创 2022-05-04 21:38:15 · 269 阅读 · 0 评论 -
Leetcode513:找树左下角的值
思路这里利用套用层序遍历的模板去做,然后取最后一层的第一个元素JS语言var findBottomLeftValue = function(root) { let res=[],queue=[] queue.push(root) if(root===null){ return res; } let resNode; while(queue.length){ // let curlevel=[]; let l原创 2022-05-04 09:48:53 · 189 阅读 · 0 评论 -
102:二叉树的层序遍历
模板JS语言var levelOrder = function(root) { //用队列解决 let res = [], queue = [] queue.push(root) if (root==null) return res while(queue.length!==0){ let length=queue.length//当前的节点长度 let curlevel=[] for(let i=0;i<lengt原创 2022-05-03 21:24:58 · 1007 阅读 · 0 评论 -
leetcode404:左叶子之和
思路左叶子的定义就是左节点不为空且没有左右孩子可以采用递归来解终止条件就是节点为空单层递归条件是左节点不为空而且左右孩子的值为空python语言class Solution(object): def sumOfLeftLeaves(self, root): """ :type root: TreeNode :rtype: int """ if not root: #终止条件 retur原创 2022-05-03 10:23:00 · 1060 阅读 · 0 评论 -
Leetcode题目总结(JavaScript)
最近跟着代码随想录刷算法题有点入迷,不知道大学在干嘛,都没怎么刷过题。。。接下来对近段时间刷的数组题做一个总结,全部都是Javascript写的。704.二分查找关键词:有序数组/** * @param {number[]} nums * @param {number} target * @return {number} */var search = function(nums, target) { let left =0, right= nums.length-1; w原创 2022-04-08 22:26:03 · 2010 阅读 · 0 评论 -
Leetcode011:加一
题解思想直接加一后,但是有特殊情况,比如尾部是9,需要进位。所以这里比较难的是从尾部读取,range(len(digits)-1,-1,-1)表示从len(digits)-1开始,注意递减,递减至-1代码class Solution(object): def plusOne(self, digits): """ :type digits: List[int] :rtype: List[int] """ #一种倒.原创 2022-03-23 16:53:07 · 325 阅读 · 0 评论 -
Leetcode010:最后一个单词的长度
题解思想很自然的就想到了通过空格切割句子,把它切成单词存到数组中,然后求数组的最后一个元素的长度,但是要注意需要把空格过滤掉代码class Solution(object): def lengthOfLastWord(self, s): """ :type s: str :rtype: int """ str_list = filter(None,s.split(" ")) return len.原创 2022-03-23 15:03:34 · 270 阅读 · 0 评论 -
Leetcode009:最大子数组和
题解思想遍历,如果它的和小于0,那就对后面的数和是副作用,肯定没戏,所以进行重置。然后再求最大值代码class Solution(object): def maxSubArray(self, nums): """ :type nums: List[int] :rtype: int """ temp=0 max=nums[0] for num in nums: ..原创 2022-03-23 14:05:02 · 91 阅读 · 0 评论 -
Leetcode008:搜索插入位置
题解思想因为是已经排好序的,利用二分法来搜索,把一些排序算法和搜索算法可以复习一下代码class Solution(object): def searchInsert(self, nums, target): """ :type nums: List[int] :type target: int :rtype: int """ # 初始化 low,high=0,len(nums).原创 2022-03-22 15:27:49 · 88 阅读 · 0 评论 -
Leetcode007:实现strStr()
题解思想两种特殊情况 :1)needle not in haystack 2) needle ==’’排除掉之后寻找needle是否在haystack中思路非常简单,但是耗时也耗内存,之后可以继续优化利用Python的find方法,return haystack.find(needle)还有一个KPM模式化匹配字符串的算法,有点难有时间可以看看代码class Solution(object): def strStr(self, haystack, needle): .原创 2022-03-21 20:56:12 · 418 阅读 · 0 评论 -
Leetcode006:移除元素
题解思想思路挺简单的,主要利用两个变量,a来遍历,b用来存我们expect的数字的序列,和删除有序数组的重复项有点像代码class Solution(object): def removeElement(self, nums, val): """ :type nums: List[int] :type val: int :rtype: int """ a = 0 b = 0 ..原创 2022-03-21 20:49:35 · 246 阅读 · 0 评论 -
Leetcode005:删除有序数组中的重复项
题解思想双指针,因为它是有序的,设置两个指针分别为slow和fast,slow记录不同的数字,而fast遍历代码class Solution(object): def removeDuplicates(self, nums): """ :type nums: List[int] :rtype: int """ if not nums: return 0 ..原创 2022-03-21 20:44:52 · 283 阅读 · 0 评论 -
Leetcode004:合并两个有序链表
题解第一种解法:递归class Solution(object): def mergeTwoLists(self, list1, list2): """ :type list1: Optional[ListNode] :type list2: Optional[ListNode] :rtype: Optional[ListNode] """ if list1 is None: .原创 2022-03-21 20:38:29 · 515 阅读 · 0 评论 -
Leetcode003:有效的括号
题解class Solution(object): def isValid(self, s): """ :type s: str :rtype: bool """ stack=[] for c in s: if c == '(': stack.append(')') elif c== '{': .原创 2022-03-21 20:26:55 · 285 阅读 · 0 评论 -
Leetcode002:回文数
题解第一种解法class Solution(object): def isPalindrome(self, x): """ :type x: int :rtype: bool """ x=str(x) if x==x[::-1]: return True else: return False重点就是理解python的切片使用x[ :.原创 2022-03-21 20:13:53 · 448 阅读 · 0 评论 -
Leetcode001:找出数组中重复的数字
我的解法:class Solution(object): def findRepeatNumber(self, nums): """ :type nums: List[int] :rtype: int """ dic= set() for num in nums: if num in dic:return num dic.add(num) return -1.原创 2022-03-16 19:35:55 · 1499 阅读 · 0 评论