![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
常用算法学习
中南滴水哥
啥也不会,废物一个!!
展开
-
dp+哈希表
想法:dp+哈希表,双重遍历的dp会TLE,所以我们使用map存储我们遍历过的数字,后面遍历的时候就只用O(n)的时间复杂度就行了/** * @param {number[]} arr * @param {number} difference * @return {number} */var longestSubsequence = function(arr, difference) { let map = {}; let max = 1; for(let item o.原创 2021-11-11 15:05:05 · 608 阅读 · 0 评论 -
双指针在树中的应用
1. 比较两棵树是否相同双指针,一个指向树p,一个指向树q,每次比较两颗树是否相同,相同则遍历左子树和右子树/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right原创 2021-08-07 21:01:36 · 174 阅读 · 0 评论 -
leetcode95 不同的二叉搜索树的个数
思路:二叉搜索树的特点很明显,如果有左边节点,那么左边节点都小于根节点,如果有右边节点,那么右边节点都大于根节点,我们可以循环遍历n中的每一个数i [1-n],以i作为跟,左子树为[1, i-1]所能构成的数,[i+1, right]为右边能构成的树,递归即可/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : .原创 2021-08-05 17:54:44 · 155 阅读 · 0 评论 -
日常刷题总结
最短无序连续子数组考点: 1. 假设数组有三分n1, n2, n3,n1,n3有序,那么n1所有元素比n2最小的元素都要小,n3所有元素比n2最大的都要大。方法1: 直接排序后比较方法2:遍历一遍,找到左边界和右边界,例如找右边界,从左往右遍历,每次遍历更新最大值,如果遇到比最大值小的,那么这个值右边的要更新,直到末尾。...原创 2021-08-03 10:18:11 · 86 阅读 · 0 评论 -
leetcode 743 网络延迟时间
单源最短路径算法Dijkstra,算法思想 - 贪心从给定点出发,每次以该点更新所以暂时还没有找到最短路径的点,最后当所有的点都更新完毕或者有点不能达到就返回相应的值。JavaScript代码/** * @param {number[][]} times * @param {number} n * @param {number} k * @return {number} */var networkDelayTime = function(times, n, k) { const原创 2021-08-02 10:24:23 · 95 阅读 · 0 评论 -
单调栈的使用
单调栈的使用/** * @param {number[]} heights * @return {number[]} */var canSeePersonsCount = function(heights) { var arr = []; // 维护一个单调的栈,栈中的元素是单调递减的 var res = []; const n = heights.length; for (let i = n - 1; i >= 0; i -= 1) { l原创 2021-07-25 15:33:52 · 106 阅读 · 0 评论 -
十大排序算法(JS版)
十大排序算法十大排序算法概述:冒泡排序选择排序插入排序归并排序(重要)快速排序(重要)未完待续... ...十大排序算法概述:排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括:关于时间复杂度平方阶 (O(n2)) 排序 各类简单排序:直接插入、直接选择和冒泡排序。线原创 2021-07-13 21:08:07 · 137 阅读 · 2 评论 -
leetcode740删除并获得点数
题目描述:给你一个整数数组 nums ,你可以对它进行一些操作。每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] + 1 的元素。开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。示例 1:输入:nums = [3,4,2]输出:6解释:删除 4 获得 4 个点数,因此 3 也被删除。之后,删除 2 获得 2 个点数。总共获得 6 个点数。示例 2:输入:num原创 2021-07-13 11:32:06 · 102 阅读 · 0 评论 -
经典动态规划问题——leetcode72(编辑距离)
经典动态规划问题——leetcode72(编辑距离)题目:给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1 = “horse”, word2 = “ros”输出:3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -> rose (删除 ‘r’)rose -> ros (删除 ‘原创 2021-07-12 12:04:09 · 427 阅读 · 2 评论 -
二叉树遍历算法详解--附源码
前言:知道了树的遍历的类型以及概念,接下来我们就要设计算法将其用代码优雅的表述出来。(还不清楚概念的可以看另一篇博客:树的遍历基本概念)开发语言:C++编辑器:CLion项目源码:树的遍历我们以这棵树为例:在写代码之前首先定义树的结构体,并且初始化创建一棵树://定义树节点的结构体struct TreeNode { int val; //根节点的值 TreeNode *left; //左子树 TreeNode *right;原创 2020-10-27 22:32:35 · 1585 阅读 · 0 评论 -
树的遍历操作详解-附代码
前言:树的遍历的几种形式:前序遍历中序遍历后序遍历广度优先遍历(BFS,层次遍历)深度优先遍历(DFS)我们以下面的这个二叉树结构为例,分别描述一下这几种遍历的方式有什么不同对于一棵二叉树,我们知道它会有左节点,右节点和根节点。无论我们使用哪种遍历,左节点一定会比右节点先访问,而区别前序,后序和中序的方法就是看何时遍历根节点,也就是根节点,左节点,右节点的顺序。前序遍历:如果根节点在左节点前面遍历,也就是说遍历顺序为:根节点->左节点->右节点。对于上面那棵树,前序遍历原创 2020-10-27 14:32:35 · 1779 阅读 · 1 评论 -
史上最全的树的遍历总结
参考文章:Morris神级遍历原创 2020-10-27 09:13:18 · 837 阅读 · 0 评论