算法
文章平均质量分 54
pingting_
加油奥
展开
-
跟着代码随想录练算法 —— 动态规划(JS)
[62. 不同路径](https://leetcode.cn/problems/unique-paths/)[63. 不同路径 II](https://leetcode.cn/problems/unique-paths-ii/)[96. 不同的二叉搜索树](https://leetcode.cn/problems/unique-binary-search-trees/)[343. 整数拆分](https://leetcode.cn/problems/integer-break/)[416. 分割等和原创 2022-09-01 16:33:48 · 589 阅读 · 1 评论 -
跟着代码随想录练算法——贪心(JS)
贪心的本质是选择每一阶段的局部最优,从而达到全局最优。原创 2022-07-26 14:45:21 · 643 阅读 · 0 评论 -
跟着代码随想录练算法——二叉树(JS)(上)
145. 二叉树的后序遍历94. 二叉树的中序遍历102. 二叉树的层序遍历107. 二叉树的层序遍历 II199. 二叉树的右视图原创 2022-07-17 17:01:46 · 519 阅读 · 0 评论 -
跟着代码随想录练算法——队列和栈(js)
[232. 用栈实现队列][225. 用队列实现栈][1047. 删除字符串中的所有相邻重复项][20. 有效的括号][239. 滑动窗口最大值][150. 逆波兰表达式求值][347. 前 K 个高频元素]原创 2022-07-16 17:09:12 · 156 阅读 · 0 评论 -
跟着代码随想录练算法——链表(js)
跟着代码随想录练算法——链表(js)[203. 移除链表元素](https://leetcode.cn/problems/remove-linked-list-elements/)[206. 反转链表](https://leetcode.cn/problems/reverse-linked-list/)[24. 两两交换链表中的节点](https://leetcode.cn/problems/swap-nodes-in-pairs/)[19. 删除链表的倒数第 N 个结点](https://leetcode原创 2022-05-15 22:53:51 · 263 阅读 · 0 评论 -
跟着代码随想录练算法——哈希表(js)
哈希表[242. 有效的字母异位词](https://leetcode.cn/problems/valid-anagram/)[383. 赎金信](https://leetcode.cn/problems/ransom-note/)[438. 找到字符串中所有字母异位词](https://leetcode.cn/problems/find-all-anagrams-in-a-string/)[49. 字母异位词分组](https://leetcode.cn/problems/group-anagrams/)原创 2022-05-11 11:07:03 · 160 阅读 · 0 评论 -
跟着代码随想录练算法——数组(相关题目)
这里写目录标题[34. 在排序数组中查找元素的第一个和最后一个位置](https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/)[35. 搜索插入位置](https://leetcode-cn.com/problems/search-insert-position/)[69. x 的平方根 ](https://leetcode-cn.com/problems/sqrtx/)[367. 有原创 2022-05-08 18:08:50 · 191 阅读 · 0 评论 -
跟着代码随想录练算法——数组
数组专题[704. 二分查找](https://leetcode-cn.com/problems/binary-search/)[27. 移除元素](https://leetcode-cn.com/problems/remove-element/)[977. 有序数组的平方](https://leetcode-cn.com/problems/squares-of-a-sorted-array/)[209. 长度最小的子数组](https://leetcode-cn.com/problems/minimum-原创 2022-05-06 21:14:11 · 166 阅读 · 0 评论 -
跟着代码随想录练算法之——回溯算法(js)
回溯77. 组合216. 组合总和 III17. 电话号码的字母组合39. 组合总和40. 组合总和 Ⅱ131. 分割回文串93. 复原 IP 地址491. 递增的子序列46. 全排列47. 全排列 Ⅱ332. 重新安排行程原创 2022-05-03 00:09:45 · 570 阅读 · 0 评论 -
NC132 环形链表的约瑟夫问题
NC132 环形链表的约瑟夫问题单向循环链表+模拟尾插法建立单向链表,节点的val为自己的编号最后将尾节点的 next 指向头结点,形成单向循环列表进行循环操作,循环结束的条件为链表中只剩下一个元素,也就是 p.next === pcount 用于计数,初始化为1;p为当前节点,初始化从head开始;pre为p的前一个节点,初始化为rear;如果当前计数达到 m ,表明p需要被删除,让 pre.next = p.next 即可,p后移一位如果不需要删除,count + 1,pre,p都后移一原创 2022-04-25 12:58:36 · 375 阅读 · 0 评论 -
NC95 数组中的最长连续子序列(js)
NC95 数组中的最长连续子序列排序+遍历计数特判一下数组元素为0和1的情况通过 sort() 将数组排序,ans 记录最长序列,count 记录当前序列长度,each 记录序列末尾元素如果当前元素等于 each + 1,可以添加到序列尾部,count ++如果当前元素 == each,忽略,continue 即可如果不满足上面两种情况,则重新开始一个序列,记录下ans与当前序列长度的较大值,并且count需要从1开始。遍历完数组之后返回ans即可/** * max increasin原创 2022-04-25 12:32:51 · 301 阅读 · 0 评论 -
NC105 二分查找-Ⅱ
NC105 二分查找-II这个b站的视频对于二分的边界情况说明的很清楚,推荐观看学习。二分查找为什么总是写错?–bilibili这里的题目可以参考 找到第一个 大于等于 target 的元素IsBlue 的条件为 < target,小于的都是蓝色,大于等于的都是红色,最后返回红色边界,也就是返回 r特判:但是这个target有可能在nums数组中不存在,在返回之前还需要判断数组下标为r的值是否等于 target 如果不等于则说明target不在数组中,返回 -1;否则直接返回 r原创 2022-04-24 22:55:29 · 172 阅读 · 0 评论 -
NC89 字符串变形
NC89 字符串变形字符串通过 split 方法转换为数组,分隔符为空格将数组反转 ,使用 reverse 方法对数组中每个元素进行大小写互换,使用 parseStr 函数再拼接parseStr 函数的实现:对传入的字符串str遍历每个字母,charAt(i) 获取字符串第i位的字符charCodeAt返回字符的 unicode编码对字符的大小写进行判断,小写转换为大写则将 unicode-32,大写转换为小写则将 unicode+32 ,fromCharCode 方法根据unicode原创 2022-04-24 22:54:23 · 191 阅读 · 0 评论 -
NC123 序列化二叉树
NC123 序列化二叉树str 返回最终遍历的字符串序列,空节点用 #表示,非空节点用节点的 val 表示每个节点之间使用! 隔开,因为 Serialize 返回的是字符串,所以需要一个分隔符,便于 Deserialize 来拆分字符串得到各个节点Serialize特判一下空树返回空字符串借助队列层次遍历二叉树:将根节点放入队列 queue当队列不为空时:取出队头元素,如果队头有左节点,左节点 + ! 拼接到str,如果左节点不存在 #! 拼接到str,右节点也一样。最后返回 s原创 2022-04-24 22:45:45 · 828 阅读 · 0 评论 -
NC81 二叉搜索树的第k个节点(js)
NC81 二叉搜索树的第k个节点二叉搜索树又叫二叉排序树,中序遍历结果为升序序列我们可以通过中序遍历,先找到第k小节点,再计数,计到第k个时,这个节点也就是第k小的节点了,通过ans变量记录这个节点的值并在最后返回那么如何找到最小的节点呢?根据二叉排序树的性质:左子树的每个节点都小于当前节点,右子树的每个节点都大于当前节点。那么最左边的节点,也就是中序遍历中最先没有左子树的节点最小。这里设置一个flag,初始化为0,当遍历到了最小节点的时候设置为1,num在 flag==1时才开始计数当flag原创 2022-04-24 22:38:50 · 554 阅读 · 0 评论 -
NC51 合并k个已排序的链表
NC51 合并k个已排序的链表解法一:使用辅助数组遍历每个链表,将节点的val值push进数组arr中对arr排序将排序后的数组转换成链表返回头结点head时间复杂度:遍历所有节点O(n),排序O(nlogn)空间复杂度:使用和节点数量相等长度的数组,O(n)/* * function ListNode(x){ * this.val = x; * this.next = null; * } *//** * * @param lists Li原创 2022-02-05 19:00:18 · 659 阅读 · 0 评论 -
NC82 滑动窗口的最大值
NC82 滑动窗口的最大值刚开始看到这题我也只有暴力的想法,O(n*k)然后去看了官方的题解当num数组长度小于size和size等于0时 直接返回 []queue为一个可以两端进行删除,并在末尾插入的队列遍历num数组,维护queue为递减队列当queue为空时,直接入队当num[i]大于queue的队尾元素时,队尾元素pop,知道队尾元素大于num[i]或者队空。然后让num[i]入队当num[i]小于queue队尾元素时,元素直接入队当队头元素下标不属原创 2022-02-04 23:16:19 · 402 阅读 · 0 评论 -
NC25 删除有序链表中重复的元素-I NC42 有重复项数字的全排列
NC42 有重复项数字的全排列本质和无重复数字的全排列相同但是由于有重复的数字所以多了一步去重这里我选着添加了一个map,储存的是字符串对应true如果map中没有当前这种情况的排列,则push进ans数组并且在map中加入 当前这种排列的字符串/** * * @param num int整型一维数组 * @return int整型二维数组 */function permuteUnique( num ) { let book = [] book.length原创 2022-02-04 21:49:39 · 249 阅读 · 0 评论 -
NC2 重排链表(js实现)
NC2 重排链表解法一: 栈 + 合并链表先遍历一遍链表,放在数组 stack中,得到链表长度len指针q用来遍历链表,next用来存q的下一位newHead作为新的头,rear表示链表的尾部,使用尾插法cnt表示q走到了哪里,走到链表的一半就可以停下当 top 和 q相等时 ,表明链表有奇数个节点并且当前是中点的位置,此时只插入一个节点即可一般情况先插入q再插入topq指向它自己的next,cnt + 1最后返回newHead/* * function原创 2022-02-04 00:17:35 · 1229 阅读 · 0 评论 -
NC20 数字字符串转化成IP地址(js实现)
NC20 数字字符串转化成IP地址解法一: 暴力枚举三层循环找三个.的位置每一次循环判断前一段是否合法,不合法直接跳过当前层循环最后一次循环判断第三段和第四段是否合法最后将结果放入ans数组返回可以AC,不推荐/** * * @param s string字符串 * @return string字符串一维数组 */function restoreIpAddresses( s ) { if(s.length <= 3) return []原创 2022-02-04 00:16:50 · 1157 阅读 · 0 评论 -
洛谷题单-线性表(链表,队列,栈)
数据结构1-1题单数组点名寄包柜栈洗盘子洗盘子2括号匹配后缀表达式队列超市排队超市排队2约瑟夫问题链表排队记录排队模拟队列安排约瑟夫问题数组点名寄包柜栈洗盘子洗盘子2括号匹配后缀表达式队列超市排队超市排队2约瑟夫问题链表排队记录排队模拟队列安排约瑟夫问题...原创 2021-03-31 19:50:50 · 1170 阅读 · 0 评论 -
21.合并俩个有序链表(js实现)
只需设置俩个指针,每次比较,小的加入新的链表,然后指针后移,直到一个链表全部被添加进新的链表。如果某个链表还有剩余,直接加在新链表尾部即可。最后返回新的头结点。/** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) * this.next = (next===undefined ? null : next)原创 2021-11-16 18:38:57 · 1341 阅读 · 0 评论 -
牛客高频Top200(7)
牛客高频Top200 js代码NC96 判断一个链表是否为回文结构NC96 判断一个链表是否为回文结构使用快慢指针,当快指针到链表尾部时,慢指针到链表中间,将后半部分链表反转,然后比较。p1为慢指针,p2为快指针,开始时p1,p2指向headp1每次走一步,p2每次走俩步,当p2指向最后一个或指向null停止如果p2指向最后一个,则链表元素为奇数个,将p1后移一位如果p2指向null,则链表元素为偶数个将p2指针指向head 比较p2,p1然后后移 不相等直接返回false/* * f原创 2021-12-15 18:36:02 · 362 阅读 · 0 评论 -
3.21~3.24算法练习(模拟+sort)
3.21~3.27算法练习模拟与高精度二级目录三级目录模拟与高精度1.乒乓球题目描述华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在1111分制和2121分制下,双方的比赛结果(截至记录末尾)。比如现在有这么一份记录,(其中W表示华华获得一分,L表示华华对手获得一分):WWWWWWWWWWWWWWWWWWWWWWLW在1111分制下,此时比赛的结果是华华第一局1111比00获胜,第二局1111比00获胜,正在进行第三局,当前比分11比11。而在2121分制下,此时比赛原创 2021-03-24 23:10:09 · 236 阅读 · 0 评论 -
NC57 反转数字
NC57 反转数字判断数字正负,flag表示符号负数的话转为数组不考虑第一位数组反转再转换类型为字符串再到数字判断数据是否在范围之内,不在直接置为0/** * * @param x int整型 * @return int整型 */function reverse( x ) { let ans; let flag = 1; if(x < 0){ ans = x.toString().split('').sl原创 2022-01-18 13:47:42 · 127 阅读 · 0 评论 -
力扣8,9,10
8.字符串转换数组trimLeft()去除前导空格,Number.parseInt()获取数值,若为NaN返回0,再加一个范围的判断。/** * @param {string} s * @return {number} */var myAtoi = function(s) { s = s.trimLeft();//去除前导空格 let num = Number.parseInt(s); if(isNaN(num)){//非数值和超过范围的 return 0原创 2021-11-15 19:57:30 · 170 阅读 · 0 评论 -
牛客高频Top200(3)
这里写目录标题NC54数组中相加和为0的三元组NC66在二叉树中找到俩个节点的最近公共祖先NC54数组中相加和为0的三元组排序依次遍历当前数 > 0 跳过当前的数与前一个相等 跳过俩个指针 i 从 当前的下一个开始 j从最后一个开始,若当前的和大于0,j–;若当前的和小于0,i++。若等于零,则得到一种解,i++,j–,要注意i,j在移动时也需要注意去重。/** * * @param num int整型一维数组 * @return int整型二维数组 */func原创 2021-11-28 22:46:24 · 264 阅读 · 0 评论 -
牛客高频Top200(4)
牛客高频Top200NC109 岛屿数量NC48 在旋转过的有序数组中寻找目标值NC128 接雨水问题NC7 买卖股票的最好时机(一)NC136 输出二叉树的右视图NC109 岛屿数量DFS:遍历二维数组每个位置,遇到1将count + 1,再置0再将相邻的四个方向为1的置0,一直递归下去,直到每个方向都是0/** * 判断岛屿数量 * @param grid string字符串型二维数组 * @return int整型 */function solve( grid ) {原创 2021-12-06 17:45:03 · 413 阅读 · 0 评论 -
NC86 矩阵元素查找 NC30 缺失的第一个正整数
NC86 矩阵元素查找 NC30 缺失的第一个正整数NC86 矩阵元素查找NC30 缺失的第一个正整数NC86 矩阵元素查找由于矩阵元素行,列都是从小到大有序的,可以从左下角开始如果当前元素小于目标值,由于向上只会更小,所有则向右移动如果当前元素大于目标值,由于向右只会更大,所有则向上移动/** * * @param mat int整型二维数组 * @param n int整型 * @param m int整型 * @param x int整型 * @retu原创 2022-01-19 23:26:56 · 419 阅读 · 0 评论 -
牛客高频Top200(5)
牛客高频Top200js代码NC50链表每k个节点一组翻转NC91 最长上升子序列(三)NC50链表每k个节点一组翻转当k = 1或者传入链表为空时,k可以直接返回。数组stack用来模拟栈,将当前节点放入stack中当stack中的元素个数达到k个时,从栈顶取出记得取出的元素next一定要设置为null,要不然如果链表长度和k值相等就会陷入一个圈套啦!(可以输入{1,2},2试一试),然后放在新的newHead后面,使用尾插法。当遍历完整个链表时,若stack数组中还有剩余,这部分就不需要逆原创 2021-12-07 13:14:13 · 85 阅读 · 0 评论 -
牛客高频Top200(1)
牛客高频Top200中的一些题NC78反转链表NC140排序NC93设计LRU缓存结构NC45实现二叉树先中后遍历NC119最小的k个数NC15二叉树层序遍历NC78反转链表pre为上一个节点,cur为当前遍历节点,next用来保存下一个节点,每次遍历,先保存下一个节点,让当前节点cur指向它的前一个节点pre,pre和cur同时后移。遍历到最后,cur指向null,pre指向最后一个节点,直接返回pre即可。function ReverseList(pHead){ let pre = nu原创 2021-11-18 17:15:28 · 389 阅读 · 0 评论 -
牛客高频Top200(2)
牛客高频Top200中的一些题-js代码NC88寻找第K大NC61俩数之和NC合并俩个有序链表NC76用俩个栈实现队列NC68跳台阶NC88寻找第K大从大到小快排 直接输出第k个元素/** * * @param a int整型一维数组 * @param n int整型 * @param K int整型 * @return int整型 */function findKth( a , n , K ) { quickSort(a , 0 ,a.length - 1);原创 2021-11-18 22:10:36 · 214 阅读 · 0 评论 -
两道关于并查集的题目
两道关于并查集的题目知识点七段码(并查集+dfs)网络分析(并查集)知识点其实我是在刷蓝桥杯的真题的时候才发现了这个知识点,看别人题解代码看不懂,然后就去学习了一下,看了一个大佬写的并查集相关解释,简直深得我心,传送门,里面江湖大侠的例子让我顿时明白了,哈哈哈哈。主要代码块1.找掌门人 2.合并int find(int k){ if(f[k]==k) return k; return f[k]=find(f[k]);}void hebing(int x1,int x2){ int原创 2021-04-15 20:34:39 · 76 阅读 · 0 评论 -
319.灯泡开关
11.盛水最多的容器看了题解才知道是使用双指针,i从头开始,j从尾开始,每次更新max,每次排除短的那一根,继续计算区域。下面是js代码。/** * @param {number[]} height * @return {number} */var maxArea = function(height) { // i , j 表示俩个指针 i从左边开始 j从右边开始 let i = 0; let j = height.length - 1; let max = 0;原创 2021-11-15 20:30:19 · 173 阅读 · 0 评论 -
洛谷题单 算法1-7 搜索
题单--搜索八皇后一级目录八皇后题目链接思路分析:这是一道需要使用dfs的题,本来考虑用二维数组来记录放皇后的位置,但是题目中的左对角线和右对角线的标记和清除就比较麻烦,看了一下题解,觉得设置4个数组分别一级目录...原创 2021-04-08 16:06:15 · 240 阅读 · 0 评论 -
NC100 把字符串转换成整数(atoi)
NC100 把字符串转换成整数(atoi)通过字符串的trim()方法取出两端空格flag作为数字的符号,1表示默认为正数flag2表示当前出现的正负号是否合法,以下情况为不合法之前已经出现过数字之前已经出现过正负号当遇到数字拼接到ans上遇到不合法的符号或者字母直接break结束遍历访问转换一下类型然后返回,返回之前检查数据范围/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 *原创 2022-01-18 13:43:12 · 117 阅读 · 0 评论 -
一些力扣题
5.最长回文子串将字符串s的每个间隔插入’#’ 比如"babad" => “#b#a#b#a#d#” 这样可以直接从当前位置开始,l往左,r往右,index记录max更新时的最长回文子串下标,最后得到的数组再将#去掉,然后转为字符串返回。/** * @param {string} s * @return {string} */var longestPalindrome = function(s) { var news = []; var k = 0; var m原创 2021-11-14 18:37:11 · 352 阅读 · 0 评论 -
NC60 判断一棵二叉树是否为搜索二叉树和完全二叉树
NC60 判断一棵二叉树是否为搜索二叉树和完全二叉树搜索二叉树:使用递归方式遍历如果该节点有左子树,则左子树上的所以值应当小于当前节点的值如果该节点有右子树,则由子树上的所以值应当大于当前节点的值也就是说中序遍历的结果应当是递增的完全二叉树:层次遍历情况下如果遇到了最后一个节点将 flag 为 true左右孩子不全只有左孩子没有右孩子如果在之前已经遇到最后一个节点的情况下,当前节点不是叶子结点,那么不是完全二叉树如果当前节点只有右孩子没有左孩子则不是完全二叉树/*原创 2022-01-17 16:00:07 · 359 阅读 · 0 评论 -
寒假第一周算法训练
第一周算法训练只写出来14道题,有一道思维题想来想去还错了哈哈哈A.查成绩题目链接:https://vjudge.net/problem/%E8%AE%A1%E8%92%9C%E5%AE%A2-131根据读入的find,insert,end来判断需要进行的操作代码:#include<stdio.h>#include<string.h>struct student{ char name[20]; int score;};int main(){ struct原创 2021-02-01 00:45:30 · 962 阅读 · 4 评论 -
牛客高频Top200(6)
牛客高频Top200 js代码NC73 数组中出现次数超过一半的数字NC59 矩阵的最小路径和三级目录NC73 数组中出现次数超过一半的数字设置一个res作为基位,开始为数组第一个元素,cnt计数,开始为1遍历数组,若当前元素与res相等,cnt + 1,若不相等,cnt - 1当cnt为0时,更新res,重置cntfunction MoreThanHalfNum_Solution(numbers){ if(!numbers || numbers.length == 0) retur原创 2021-12-14 01:26:30 · 398 阅读 · 0 评论