- 博客(29)
- 收藏
- 关注
原创 js设计链表
初始化 MyLinkedList 对象。获取链表中下标为 index 的节点的值。如果下标无效,则返回 -1。将一个值为 val 的节点插入到链表中第一个元素之前。在插入完成后,新节点会成为链表的第一个节点。将一个值为 val 的节点追加到链表中作为链表的最后一个元素。将一个值为 val 的节点插入到链表中下标为 index 的节点之前。如果 index 等于链表的长度,那么该节点会被追加到链表的末尾。如果 index 比长度更大,该节点将 不会插入 到链表中。
2023-05-27 23:56:51 371 1
原创 【动态规划part05】最后一块石头的重量,目标和,一和零
有一堆石头,每块石头的重量都是正整数。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x!= y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块石头。返回此石头最小的可能重量。如果没有石头剩下,就返回 0。解题思路:尽量将石头分成重量相同的两堆,相撞之后石头最小,
2023-08-04 00:02:37 132
原创 【动态规划part4】分割等和子集
给你一个 只包含正整数 的 非空 数组 nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。题解: 两个子集元素和相等,相当于将数组nums的总和平分,当总和为奇数时一定不满足条件返回false;解释:数组可以分割成 [1, 5, 5] 和 [11]。输入:nums = [1,5,11,5]
2023-07-22 00:23:51 150
原创 【动态规划part03】整数拆分,不同的二叉搜索树
2.递推公式:dp[i] += dp[以j为头结点左子树节点数量]*dp[以j为头结点右子树节点数量],j相当于头结点的元素,从1遍历到i为止;4.确定遍历顺序:dp[i]是依靠dp[i-j]的状态,所以遍历i一定从前向后遍历,遍历i里面的每一个数作为头结的状态,用j来遍历;3.初始化:dp[0],dp[1]无意义,初始化dp[2] = 1,拆分数字2得到最大乘积是1;4.确定遍历顺序:dp[i]是依靠dp[i-j]的状态,所以遍历i一定从前向后遍历,
2023-07-21 00:16:39 176
原创 【动态规划part2】不同路径
2.递推公式:只能有两个方向来推导出来,即dp[i - 1][j] 和 dp[i][j - 1],因为存在障碍物,当前位置(i,j)不是障碍物才满足 即。3.初始化:dp[i][0] 一定都是1,从(0,0)的位置到(i,0)的路径只有一条,同理dp[0][j] = 1;2.递推公式:只能有两个方向来推导出来,即dp[i - 1][j] 和 dp[i][j - 1];1.确定dp数组以及下标的含义:dp[i][j]表示到达(i,j)位置所有路径和;网格中的障碍物和空位置分别用 1 和 0 来表示。
2023-07-19 00:18:18 207
原创 【day21】二叉搜索树的最小绝对值,二叉搜索树中的众数,二叉树的最近公共祖先
给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。解题思路1:二叉树搜索树是有序的,可转换为在一个有序数组上求最值,求差值;解题思路2:在递归中记录前一个节点的指针,比较相邻两个节点的值;2.二叉搜索树中的众数给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。如果树中有不止一个众数,可以按 任意顺序 返回。解题思路1:如果不是二叉搜索树,最直观的方法是把整个树都遍历了,用map统计概率,把频率排个
2023-07-02 18:21:33 157 1
原创 【day17】平衡二叉树,二叉树的所有路径,左叶子之和
二叉树part041.平衡二叉树2.二叉树的所有路径3.左叶子之和1.平衡二叉树给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。输入:root = [3,9,20,null,null,15,7]输出:truevar isBalanced = function(root) { return depth(root) != -1;};var depth = function(root)
2023-06-24 21:59:28 40
原创 【day15】二叉树层序遍历,翻转二叉树,对称二叉树
确定单层递归的逻辑,if左子树右子树都为空返回true, 有一个为空,有一个不为空,直接判定为不对称返回false;输入:root = [3,9,20,null,null,15,7] ,输出:[[3],[9,20],[15,7]]左子树的左节点,右子树的右节点)与(左子树的右节点,右子树的左节点)相等都返回为true则该二叉树为对称二叉树;输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]输入:root = [1,2,2,3,4,4,3] 输出:true。
2023-06-22 17:34:18 54 1
原创 【day14】二叉树前中后序遍历
输入:root = [1,null,2,3] 输出:[1,2,3]输入:root = [1,null,2,3] 输出:[1,3,2]给你二叉树的根节点 root ,返回它节点值的 前序 遍历。输入:root = [1,null,2,3]输出:[3,2,1]
2023-06-22 16:43:27 60 1
原创 【day4链表】两两交换链表中的结点,链表相交
输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3。给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。
2023-05-28 20:55:24 29 1
原创 【day3】移除链表元素
当头节点的value值等于val,要删除头结点head,那就首先将头结点指向的节点等于头结点head->next = head;方案1:要删除链表中的节点,首先要找到该节点前一个节点指向该节点的指针,将前一个节点的指点指向 该节点后指向的节点,即cur->next = cur->next->next;方案2:定义个虚拟节点指向头结点dummyHead,不用单独对头结点操作,遍历完整个链表,最终返回dummyHead->next;例:1->2->3->4->5->6,移除3得到1->2->4->5->6;
2023-05-26 20:54:54 33 1
原创 【day2数组】滑动窗口,螺旋矩阵
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0。给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix。给定一个含有 n 个正整数的数组和一个正整数 target。
2023-05-25 22:04:18 85 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人