刷题笔记
文章平均质量分 62
volit_
这个作者很懒,什么都没留下…
展开
-
LeetCode刷题笔记 - JavaScript(十六)
对于会相撞的元素,只有当它本身是负数,且它前一个是正数时,即前面的元素向右移动,本身向左移动时,两个元素就会相撞。这时,若当前元素比前一个元素小,当前元素被摧毁,即不被加入stack;否则,前一个元素比较小,或两元素相等,两个元素都被摧毁(弹出栈,和不入栈),若当前元素未被摧毁,则继续向左移动,直到被加入到存活栈或被摧毁。:给定一个包含正负数的数列,正数表示向右移动,负数表示向左移动,同一方向的元素永远不会相撞,不同方向的元素较小的,或相等的都会摧毁,求最后剩余的数列。维护的过程中,计算距离。原创 2023-02-02 14:18:21 · 271 阅读 · 0 评论 -
LeetCode刷题笔记 - JavaScript(十五)
基础做法就是将字符串中的字符排序,然后以排序后的字符串为键,值为以当前字符组成的字符串集合。在此之上的优化写法是用计数法替代排序,用O(n)的时间和空间复杂度,优化掉排序的时间复杂度。给定一组用外星语书写的单词 words,以及其字母表的顺序 order,只有当给定的单词在这种外星语中按字典序排列时,返回 true;:将n个时间排序,则最小时间差必然出现在相邻两个/首位时间中,然后根据鸽巢原理,只有1440中时间情况,当时间的情况超过1440时,则最小时间差为0.:求n个时间中的最小时间差。原创 2023-02-01 12:52:29 · 403 阅读 · 0 评论 -
LeetCode刷题笔记 - JavaScript(十四)
这样,每当元素被访问时,将元素移动到链表首部,删除元素时,从链表尾部删除。优化写法:使用一个map计数,先统计第一个字符串每个字母出现的次数,然后统计第二个字符串,当字符串某一位的计数值原创 2023-01-31 23:02:59 · 403 阅读 · 0 评论 -
LeetCode刷题笔记 - JavaScript(十三)
多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表。给定循环单调非递减列表中的一个点,写一个函数向这个列表中插入一个新元素 insertVal ,使这个列表仍然是循环升序的。给定位于列表第一级的头节点,请扁平化列表,即将这样的多级双向链表展平成普通的双向链表,使所有结点出现在单级双链表中。如果有多个满足条件的插入位置,可以选择任意一个位置插入新的值,插入后整个列表仍然保持有序。给定的可以是这个列表中任意一个顶点的指针,并不一定是这个列表中最小元素的指针。原创 2023-01-30 09:11:11 · 229 阅读 · 0 评论 -
LeetCode刷题笔记 - JavaScript(十二)
双指针分别遍历两个链表,则两个指针一定会在n+m步后,达到同一个结点。如果两个链表有重合点,那么n+m步后,p和q指向的就是该重合点,否则p和q都会指向null。给定两个 非空链表 l1和 l2 来代表两个非负整数。将这两数相加会返回一个新的链表。给定两个单链表的头节点 headA 和 headB ,请找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null。给定单链表的头节点 head ,请反转链表,并返回反转后的链表的头节点。:求两个链表的第一个重合节点。:求链表反转的结果。原创 2023-01-29 11:47:47 · 363 阅读 · 0 评论 -
LeetCode刷题笔记 - JavaScript(十一)
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。从链表的头节点开始沿着 next 指针进入环的第一个节点为环的入口节点。:快慢指针,因为如果链表中有存在环,则快慢指针必定会相遇,而当快慢指针相遇时,慢指针到环入口的距离 = 链表head到环入口的距离。:双指针,让一个指针先走n步,另一个指针从头开始,然后两个指针一起走,这样后一个指针的位置就是倒数第n个指针的前一个了。给定一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。原创 2023-01-28 11:38:24 · 561 阅读 · 0 评论 -
LeetCode刷题笔记 - JavaScript(十)
使用两个分别存储两个字符串中各字符出现的次数,然后维护满足条件的最短子串。输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。给定一个字符串 s ,验证 s 是否是 回文串 ,只考虑字母和数字字符,可以忽略字母的大小写。给定一个非空字符串 s,请判断如果 最多 从字符串中删除一个字符能否得到一个回文字符串。构造一个只有字母和数字的字符串,然后比较翻转后的字符串和原字符串是否相等。:判断一个字符串中的字母和数字部分是否是回文的。(2)双指针(正经写法)原创 2023-01-27 14:36:24 · 621 阅读 · 1 评论 -
LeetCode刷题笔记 - JavaScript(九)
最基本的做法是使用滑动窗口,维护长度为s1.length的滑动窗口,统计每个字母出现的次数,只要出现s1的子序列,就直接返回结果。但是这个过程可以使用双指针优化,我们不去比较两个序列,而是判断是否有和s1中字母出现次数相同的子数组的长度===n。:在上一题的基础上,增阿一个记录答案的数组res,当找到一个子序列时,不直接返回结果,而是将该结果的起始下标l加入到答案数组res中,最后返回结果。给定两个字符串 s 和 p,找到 s 中所有 p 的 变位词 的子串,返回这些子串的起始索引。原创 2023-01-26 15:47:47 · 760 阅读 · 0 评论 -
LeetCode刷题笔记 - JavaScript(八)
int sumRegion(int row1, int col1, int row2, int col2) 返回左上角 (row1, col1) 、右下角 (row2, col2) 的子矩阵的元素总和。当后面出现重复前缀和时,可以取出第一次出现该前缀和的下标,计算出子数组长度。给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。:求一个二维矩阵的子矩阵和。原创 2023-01-25 11:50:05 · 984 阅读 · 0 评论 -
LeetCode刷题笔记 - JavaScript(七)
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …给定一个正整数数组 nums和整数 k ,请找出该数组内乘积小于 k 的连续的子数组的个数。维护一个小于target的值,当值>=target时,更新res。给定一个整数数组和一个整数 k ,请找到该数组中和为 k 的连续子数组的个数。给定一个含有 n 个正整数的数组和一个正整数 target。:求和>=target的最短子数组的长度。:求乘积小于k的所有连续子数组。:求和为k的所有子数组。原创 2023-01-24 11:21:02 · 852 阅读 · 1 评论 -
LeetCode刷题笔记 - JavaScript(六)
先考虑去重的问题,首先,对于原数组排序,在三层循环中,需要判断当前循环变量与上一个循环变量的值不相等,否则跳过当前循环。因为数组是升序排序,因此只需要使用两个指针l和r,分别指向数组的首部和尾部,若当前首部和尾部的和>target,使尾指针向左移动,否则,若和原创 2023-01-23 14:39:21 · 942 阅读 · 0 评论 -
LeetCode刷题笔记 - JavaScript(五)
本题要求使用32位整数,因此在写题过程中,不使用超过32位整形的特性。:使用Brian Kernighan算法,该算法的核心概念是通过n & (n-1),可以消除一个数二进制中最右1位1。给定两个整数 a 和 b ,求它们的除法的商 a/b ,要求不得使用乘号 ‘*’、除号 ‘/’ 以及求余符号 ‘%’。给定一个非负整数 n ,请计算 0 到 n 之间的每个数字的二进制表示中 1 的个数,并输出一个数组。给定两个 01 字符串 a 和 b ,请计算它们的和,并以二进制字符串的形式输出。原创 2023-01-22 13:52:59 · 1332 阅读 · 0 评论 -
LeetCode刷题笔记 - JavaScript(四)
你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。例如,字符串"aaa"与模式"a.a"和"ab。如果相同继续判断后面是否还有*通配符,如果有,分别判断匹配n次和匹配0次的情况。模式中的字符’.‘表示任意一个字符,而’a"匹配,但与"aa.a"和"ab*a"均不匹配。请实现两个函数,分别用来序列化和反序列化二叉树。:模拟二叉树的序列化和反序列化。:dfs的序列化和反序列化。原创 2023-01-21 12:43:32 · 2268 阅读 · 1 评论 -
LeetCode刷题笔记 - JavaScript(三)
规律一:n位数上总的1的个数为n*(10^(n-1)),如1位数1的总和为1,2位数的1的总和为20,3位数的总和为300;规律二:求1~n之间的所有数上的1的数量总和就是求n上的每一个数位区间上的1的数量的总和。设f(n)是可以求出1-n之间所有1的数量的函数,假如n=234,那么1-n之间所有1的数量就等于:f(200)+f(30)+f(4);输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。:求1~n中每个数字出现的1的数量的和。:求每个滑动窗口的最大值。原创 2023-01-20 19:04:31 · 2192 阅读 · 0 评论 -
LeetCode刷题笔记 - JavaScript(二)
设dp[i][j]为投掷i个骰子时,点数和为j的概率。请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。即字符串是否为空或全空格,去除空格后的首字符是否是有效整数字符,以及是否超出32位整数边界。把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。:实现一个求队列最大值的均摊时间复杂度为O(1)的队列。:求n个投掷n个骰子可能出现的所有和的概率。原创 2023-01-18 19:49:05 · 607 阅读 · 0 评论 -
LeetCode刷题笔记 - JavaScript(一)
剑指 Offer 57 - II. 和为s的连续正数序列,剑指 Offer 56 - I. 数组中数字出现的次数,剑指 Offer 56 - II. 数组中数字出现的次数 II。原创 2023-01-17 15:15:56 · 759 阅读 · 2 评论 -
俩日总结(【20】【21】)
刷题:(还有两个题在POJ上,POJ关掉了,明天才开…)这两天主要是刷了有关概率dp和单调队列优化dp的题,然后补了上回牛客的I、K算法学习:概率dp一般用来解决概率和期望相关的问题,这类问题解题的方法往往是先求出各种事件的发生概率,然后根据这些概率,求出动态规划的状态转移方程。(一般情况下,求概率正着推,求期望倒着推)单调队列优化dp单调队列是一种可以使队列中的值保持单调递增/递减的线性结构,一般可以同时对队头和队尾操作,可以通过head,tail标记,或者使用STL中的deque容原创 2021-07-21 20:41:23 · 72 阅读 · 0 评论 -
俩日总结(【18】、【19】)
刷题:状压dp:尼姆博弈:补了前天的A学习内容:状压dp状态压缩dp,是一种利用二进制的性质来表示状态的动态规划。通常被用做表示物品被选取的状态,比如说有四件物品,用0表示不选,1表示选取,那么选取第1件和第3件就可以表示为1010,变成十进制就是10(10),所以,一般当物品的数量比较少时(<64),我们就可以用状压dp去表示物品的选取状态。有时,当物品的状态比较多,而有效状态比较少的时候,我们也可以使用位运算的一些操作,来去除这些无效状态,常用的有:(1)&(按位与操原创 2021-07-20 00:02:32 · 76 阅读 · 2 评论 -
壹周总结(第一周)
学习内容:倍增ST表RMQLCA康托展开迭代加深搜索状态压缩威佐夫博弈斐波拉契博弈尼姆博弈SG函数刷题:vj(12道)搜索、ST表(搜索)洛谷(3道)RMQ,LCA博弈论:HDU(3道)POJ(1道)原创 2021-07-17 11:59:59 · 74 阅读 · 0 评论 -
俩日总结(【13】【14】)
刷题:这两天主要是把前面的搜索题组给写完了,然后补了前面两场cf的补题。学习内容:迭代加深搜索限定上界的深度优先搜索,一般用在存在答案的情况中,它是一种结合了DFS和BFS的搜索算法。如图,假设m和n都是很大的常数,如果答案在A2的位置,那么DFS将会在A1的子数下消耗大量的时间去深度搜索B1-BM,而使用BFS的话将会消耗大量的空间去存A1-An。而迭代加深,则结合了DFS和BFS的优势,即逐级加深的深度优先搜索,有点像是用bfs的套路在做dfs。举个例子,如果当前设定的最大深度为3,原创 2021-07-15 01:30:46 · 89 阅读 · 0 评论 -
俩日总结(7月【12】【13】)
刷题:HDU1430、1043、1429、1855、1427学习内容:康托展开就是计算一个排列顺序X在这个序列的全排列中的排名。contor(X)=cnt[i](n-1)!+cnt[i+1](n-2)!+…+cnt[n]*(0)!;cnt[i]是从当前位置的后一位开始,比当前位置上的数小的数量。int contor(string s){ int ans=0,cnt; int len=s.size(); for(int i=0;i<len-1;i++){ cnt=0; f原创 2021-07-12 23:19:29 · 113 阅读 · 0 评论 -
P1802 5倍经验日
题目原题链接题目描述Michael 喜欢滑雪。这并不奇怪,因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael 想知道在一个区域中最长的滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子:1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9一个人可以从某个点滑向上下左右相邻原创 2021-05-09 23:18:54 · 125 阅读 · 0 评论 -
采药+数字三角形
题目题目描述辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”如果你是辰辰,你能完成这个任务吗?输入格式第一行有 22 个整数 TT(1 \le T \le 10001≤T≤1原创 2021-05-08 23:27:42 · 211 阅读 · 0 评论