
数据结构与算法
文章平均质量分 67
数据结构与算法
麦田里的POLO桔
爱好:搬砖
梦想:造轮子
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
需求做完不知道干什么?那就写个React吧
阉割版 React - 使用文档Note: index.js 需要搭配 index.html 使用,因为存在多个版本,所以需要保证两个文件名相同!配置缘故,在 index.js 中书写 JSX,默认使用原生 React 的 createElement,尽管引入的是自己的 React,也并不会使用我们自己写的 createElement因此我们需要先去 Babel 将JSX 编译为 JS ,这里面显式地调用了 createElement ,一起看个一段写在 index.js 中的代码:render()原创 2022-03-03 10:36:20 · 894 阅读 · 0 评论 -
二叉树的广度优先遍历
二叉树的广度优先遍历:从根节点开始,一层一层遍历二叉树,自左向右地打印每一个节点思路:先创建一个数组,用数组模拟队列。压入根节点,然后开始遍历:从数组头弹出一个元素,然后看数组let arr = [];function getRes(node){ if(node){ console.log( node.val ); arr.push(node); } while(arr.length > 0){ let.原创 2021-12-04 14:44:11 · 2285 阅读 · 0 评论 -
LeedCode<简单>144. 二叉树的前序遍历(Morris 遍历)
题目描述:给你二叉树的根节点 root ,返回它节点值的前序遍历。示例 1:输入:root = [1,null,2,3]输出:[1,2,3]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]示例 4:输入:root = [1,2]输出:[1,2]示例 5:输入:root = [1,null,2]输出:[1,2]一般的前序遍历大家基本上都知道,下面这个方法还是挺有意思的M...原创 2021-10-29 20:20:18 · 142 阅读 · 0 评论 -
LeedCode<简单>141. 环形链表(高效的 “龟兔赛跑算法”)
题目描述:给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。进阶:你能用 O(1)(即,常量)内存解决此问题吗?示例 1:输入:head原创 2021-10-28 21:20:49 · 140 阅读 · 0 评论 -
LeedCode<简单>136. 只出现一次的数字(至简的 异或^ 运算符)
题目描述:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例2:输入: [4,1,2,1,2]输出: 4常规的方法有很多,但是用“异或 ^”来解决这道题,真的!太强大了!1 ^ 0 = 1、1 ^ 1 = 0、0 ^ 0 = 0、0 ^ 1 = 1简单来讲,就是相同为假,不同为真。真正.原创 2021-10-25 20:29:06 · 108 阅读 · 0 评论 -
LeedCode<简单>121. 买卖股票的最佳时机
题目描述:给定一个数组 prices ,它的第i 个元素prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。...原创 2021-10-25 16:06:48 · 80 阅读 · 0 评论 -
LeedCode<简单>112. 路径总和
题目描述:给你二叉树的根节点root 和一个表示目标和的整数targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和targetSum 。叶子节点 是指没有子节点的节点。示例 1:输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22输出:truefunction hasPathSum(root: TreeNode | null, targetSum:...原创 2021-10-24 22:56:47 · 263 阅读 · 0 评论 -
LeedCode<简单>111. 二叉树的最小深度
题目描述:给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。示例 1:输入:root = [3,9,20,null,null,15,7]输出:2示例 2:输入:root = [2,null,3,null,4,null,5,null,6]输出:5对递归的理解还是不够透彻,下文还是个人的思路分析【完全不建议参考,递归的学习过程心路历程会发生很多质的变化,想要学习递归,更应该看一个可以将其使用非常熟原创 2021-10-24 17:59:17 · 147 阅读 · 0 评论 -
LeedCode<简单>88. 合并两个有序数组【至简代码】
题目描述:给你两个有序整数数组nums1 和 nums2,请你将 nums2 合并到nums1中,使 nums1 成为一个有序数组。初始化nums1 和 nums2 的元素数量分别为m 和 n 。你可以假设nums1 的空间大小等于m + n,这样它就有足够的空间保存来自 nums2 的元素。示例 1:输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]示例 2:输入:num...原创 2021-06-30 10:43:21 · 273 阅读 · 1 评论 -
LeedCode<简单>83. 删除排序链表中的重复元素【链表递归-递归分析】
题目描述:存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。返回同样按升序排列的结果链表。示例 1:输入:head = [1,1,2]输出:[1,2]示例 2:输入:head = [1,1,2,3,3]输出:[1,2,3]常规方法一:while循环var deleteDuplicates = function (head){ if(head==null || head.next==null){原创 2021-06-29 10:33:05 · 196 阅读 · 0 评论 -
LeedCode<简单> 94. 二叉树的遍历
二叉树遍历有三种方式,分别是前序遍历、中序遍历、后序遍历。前序遍历:先访问根节点,然后遍历其左子树,看左子树是否仍然包含叶子节点,直到访问到最后一棵子树的左叶子节点为止。然后...原创 2021-06-25 15:59:54 · 117 阅读 · 1 评论 -
Binet‘s Formula 算法
这一部分内容是对 Binet's Formula 算法中,矩阵对角化的一个详细讲解。原创 2021-06-22 10:38:11 · 1186 阅读 · 1 评论 -
LeedCode<简单> 70. 爬楼梯
假设你正在爬楼梯。需要 n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶...原创 2021-06-22 10:28:27 · 165 阅读 · 0 评论 -
斐波那契数列
“求解斐波那契数列的项” 是一道非常经典的算法题,常用的方法有四个:1.递归用了递归算法的斐波那契数列,其时间复杂度满足指数阶模型:function recFibonacci(n) { if (n <= 1) { return 1; } else { return Fibonacci(n - 1) + Fibonacci(n - 2); }}我们假设用 f(n) 来表示斐波那契数列的某.原创 2021-06-21 21:54:25 · 1739 阅读 · 0 评论 -
汉诺塔
尝试通过这篇文章,记录一下借助这三个典例理解递归的过程。原创 2021-06-19 21:10:53 · 593 阅读 · 0 评论 -
LeedCode<简单> 69. x 的平方根【牛顿迭代、泰勒级数】
实现int sqrt(int x)函数。计算并返回x的平方根,其中x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sqrtx著作权归领扣网络所有。商业转载请联系官方授权,非商业转...原创 2021-06-18 18:06:53 · 438 阅读 · 0 评论 -
时间复杂度 & 空间复杂度
先来啰嗦两句,这两个复杂度在很久之前就略有了解,但写了几十dao一、时间复杂度1. 时间频度一个算法花费的时间与算法中语句的执行次数成正比原创 2021-06-17 11:30:39 · 720 阅读 · 1 评论 -
LeedCode<简单> 67. 二进制求和【BigInt】
题目描述:给你两个二进制字符串,返回它们的和(用二进制表示)。输入为 非空 字符串且只包含数字1和0。示例1:输入: a = "11", b = "1"输出: "100"示例2:输入: a = "1010", b = "1011"输出: "10101"核心思想:参照我们对十进制数的计算方式,设定数字进位门槛与进位标记。我们用%2的方式实现对进位门槛的设定,只要一个数≥2,就会被取余(思想同9+1≥10,第二位进一,第一位取0)。例如2,这一位在%2后等于0,...原创 2021-06-10 21:37:11 · 314 阅读 · 0 评论 -
LeedCode<简单> 66. 加一
题目描述:给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例1:输入:digits = [1,2,3]输出:[1,2,4]解释:输入数组表示数字 123。示例2:输入:digits = [4,3,2,1]输出:[4,3,2,2]解释:输入数组表示数字 4321。示例 3:输入:digits = [0]输出:[1]实现..原创 2021-06-10 16:18:52 · 151 阅读 · 1 评论 -
LeedCode<简单> 26. 删除有序数组中的重复项
题目描述:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:输入:nums = [1,1,2]输出:2, nums = [1,2]解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。示例 2:输入:nums = [0,0,1,1,1,2,2原创 2021-06-10 09:49:08 · 127 阅读 · 0 评论 -
LeedCode<简单> 53. 最大子序和
题目描述:给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组[4,-1,2,1] 的和最大,为6 。示例 2:输入:nums = [1]输出:1最佳实现方式:动态规划。关键思想:【看前一个数字是否>0,若>0就和当前数字相加,若≤0就不对当前数字做处理。】【这个算法重点明显都在上一次的结果,并没有考虑当前的值...原创 2021-06-04 21:27:14 · 99 阅读 · 0 评论 -
前端笔试题总结(七) - 数据结构与算法篇
1. 若查找每个记录的概率均相等,则在具有n个记录的连续顺序文件中,采用顺序查找的方式查找一个记录,其平均查找长度ASL为()原创 2021-04-24 20:04:24 · 816 阅读 · 0 评论 -
一个例子告诉你如何用算法实现全排列(超详解)
一个例子告诉你如何用算法实现全排列(超详解)首先说一下什么是全排列:给三个数:1,2,3那么对这三个数字进行全排列,结果就是:123,132,213,231,312,321(所以,全排列也就是:列出所有的排列组合情况)接下来说一下全排列用到的思想:递归(当然方法有很多,懂了一个,其他的自然也就很容易了)解题思路:每次取出一个...原创 2021-03-07 15:44:22 · 687 阅读 · 0 评论