随机刷题分栏
荟K
这个作者很懒,什么都没留下…
展开
-
删除所有出现次数最少的字符
题意: 假设字符串中出现次数最少的字母是x, 出现次数为y, 删除所有出现次数为y的字符。思路:用unordered_map统计出出现次数最少的x出现的次数y。再遍历字符串,删除所有出现次数为y的字符。原创 2023-10-22 14:21:52 · 173 阅读 · 0 评论 -
跳台阶问题
青蛙想跳到第n阶台阶,只可能从第n-1阶台阶和第n-2阶台阶跳上来,那么它第n阶台阶的跳法只与前两个台阶的跳法相关,为前两阶台阶跳法之和,从底层一直往上推。一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法(先后次序不同算不同的结果)。青蛙要跳上两级台阶有两种跳法,分别是:先跳一级,再跳一级或者直接跳两级。要求:时间复杂度:O(n)O(n) ,空间复杂度: O(1)O(1)数据范围:1 \leq n \leq 401≤n≤40。原创 2023-09-18 17:42:29 · 78 阅读 · 0 评论 -
N皇后问题
建立一个vector数组来保存行、列的值,从第一行开始循环判断,遍历每列,每列的遍历都是从第一列遍历到最后一列,这样第一行的每个列都会放皇后,再依次递归判断。要求:空间复杂度 O(1)O(1) ,时间复杂度 O(n!N 皇后问题是指在 n * n 的棋盘上要摆 n 个皇后,要求:任何两个皇后不同行,不同列也不在同一条斜线上,数据范围: 1 \le n \le 91≤n≤9。求给一个整数 n ,返回 n 皇后的摆法数。总结:采用递归,最难的在于判断是否同一斜线。例如当输入4时,对应的返回值为2,原创 2023-09-18 17:20:18 · 93 阅读 · 0 评论 -
按之字形顺序打印二叉树
层次遍历原创 2023-09-14 12:08:14 · 81 阅读 · 0 评论 -
二叉树的层序遍历
流程:先插入根节点到队列,作为第一次循环,清空当前队列到vector中,再插入当前元素集的左右孩子到队列中,统计队列大小,作为下次循环的次数。每层循环结束把vector插入到vector<vector>这个二维数组中。总结:二叉树的层次遍历,使用队列辅助,每次队列插入它孩子的节点,用队列长度作为下次循环次数。给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)给定的二叉树是{3,9,20,#,#,15,7},0 <= 二叉树的结点数 <= 1500。该二叉树层序遍历的结果是。原创 2023-09-14 10:39:22 · 76 阅读 · 0 评论 -
二叉树的后序遍历
总结:要理解二叉树的递归,递归它左子树和右子树本身可以看做一个指针后移的过程,当走到一个节点没有左节点时,如果是前序遍历就开始指针指向它的右节点(利用遍历函数传右值),如果是中序遍历,就返回它的值,指针再指向它的右节点,如果是后序遍历,指针就直接指向它的右节点,等右节点遍历完了,再返回它本身的值。二叉树的后续遍历,简单来说就是“左右根”,展开来说就是优先访问根节点的左子树的全部节点,然后再访问根节点的右子树的全部节点,最后再访问根节点。后序遍历是值按照 左节点->右节点->根节点 的顺序的遍历。原创 2023-09-14 09:39:00 · 421 阅读 · 0 评论 -
二叉树的中序遍历
二叉树的中序遍历,简单来说就是“左根右”,展开来说就是对于一棵二叉树,我们优先访问它的左子树,等到左子树全部节点都访问完毕,再访问根节点,最后访问右子树。数据范围:树上节点数满足 0 \le n \le 10000≤n≤1000,树上每个节点的值满足 -1000 \le val \le 1000−1000≤val≤1000。进阶:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)给定一个二叉树的根节点root,返回它的中序遍历结果。总结·:右节点也要经历左递归,递归这里好好注意。原创 2023-09-14 09:21:45 · 67 阅读 · 0 评论 -
二叉树的前序遍历
二叉树、递归原创 2023-09-13 22:30:07 · 70 阅读 · 0 评论 -
顺时针旋转矩阵
思路:矩阵先顺时针旋转再每行颠倒就变成了一个举证的转置,那么求顺时针旋转后的矩阵,只需要先转置再颠倒。数据范围:0<n<3000<n<300,矩阵中的值满足 0≤val≤10000≤val≤1000。要求:空间复杂度 O(N2)O(N2),时间复杂度 O(N2)O(N2)进阶:空间复杂度 O(1)O(1),时间复杂度 O(N2)O(N2)给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵。有一个NxN整数矩阵,请编写一个算法,将矩阵顺时针旋转90度。总结:学会矩阵的转置和每行元素颠倒。原创 2023-09-08 18:29:24 · 128 阅读 · 0 评论 -
主持人调度(二)
并且活动主持人需要全程参与活动,换句话说,一个主持人参与了第 i 个活动,那么该主持人在 (starti,endi) 这个时间段不能参与其他任何活动。有 n 个活动即将举办,每个活动都有开始时间与活动的结束时间,第 i 个活动的开始时间是 starti ,第 i 个活动的结束时间是 endi ,举办某个活动就需要为该活动准备一个活动主持人。数据范围: 1≤n≤1051≤n≤105 , −232≤starti≤endi≤231−1−232≤starti≤endi≤231−1。原创 2023-09-08 17:31:53 · 119 阅读 · 0 评论 -
验证IP地址
比如, 2001:0db8:85a3:0000:0000:8a2e:0370:7334 是一个有效的地址。所以, 2001:db8:85a3:0:0:8A2E:0370:7334 也是一个有效的 IPv6 address地址 (即,忽略 0 开头,忽略大小写)。比如, 2001:0db8:85a3::8A2E:0370:7334 是无效的 IPv6 地址。比如, 02001:0db8:85a3:0000:0000:8a2e:0370:7334 是无效的。同时,IPv4 地址内的数不会以 0 开头。原创 2023-09-08 17:27:52 · 77 阅读 · 0 评论 -
大数加法 (string)
数据范围:s.length,t.length≤100000s.length,t.length≤100000,字符串仅由'0'~‘9’构成。以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。总结:注意思想,按照加运算规则,-'0'string[i]变成int。要求:时间复杂度 O(n)O(n)原创 2023-09-08 17:25:48 · 89 阅读 · 0 评论 -
正则表达式匹配
在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配。2.pattern 只包含从 a-z 的小写字母以及字符 . 和 *,无连续的 '*'。2.模式中的字符'*'表示它前面的字符可以出现任意次(包含0次)。请实现一个函数用来匹配包括'.'和'*'的正则表达式。总结:这个递归暂定,过不了测试用例。1.str 只包含从 a-z 的小写字母。1.模式中的字符'.'表示任意一个字符。原创 2023-09-07 18:18:16 · 57 阅读 · 0 评论 -
单链表的排序
数据范围:0 < n \le 1000000原创 2023-09-06 16:37:42 · 121 阅读 · 0 评论 -
链表中倒数最后k个结点
数据范围:0 \leq n \leq 10^50≤n≤105,0 \leq a_i \leq 10^90≤ai≤109,0 \leq k \leq 10^90≤k≤109。其中蓝色部分为该链表的最后2个结点,所以返回倒数第2个结点(也即结点值为4的结点)即可,系统会打印后面所有的节点来比较。输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)进阶:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)原创 2023-09-06 16:14:29 · 62 阅读 · 0 评论 -
分糖果问题 (贪心算法)
简单来说就是在限制值的基础上找期望值。原创 2023-09-06 10:08:48 · 109 阅读 · 0 评论 -
滑动窗口的最大值
例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5};针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,6,[2,5,1]}。输入:[2,3,4,2,6,2,5,1],3。原创 2023-09-05 20:38:19 · 50 阅读 · 0 评论 -
三数之和为0
总结:会使用双指针,就是多两个下标指向,注意vector可以直接插入数组,注意这里后面两个指针必须在取的元素后面,不能比它小。这道题里面有很多细节,比较难。给出一个有n个元素的数组S,S中是否有元素a,b,c满足a+b+c=0?找出数组S中所有满足条件的三元组。数据范围:0≤n≤10000≤n≤1000,数组中各个元素值满足 ∣val∣≤100∣val∣≤100。空间复杂度:O(n2)O(n2),时间复杂度 O(n2)O(n2)原创 2023-09-04 21:22:59 · 56 阅读 · 0 评论 -
缺失的第一个正整数
给定一个无重复元素的整数数组nums,请你找出其中没有出现的最小的正整数。进阶: 空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)原创 2023-09-03 19:10:50 · 54 阅读 · 0 评论 -
数组中只出现一次的两个数字
数据范围:数组长度 2≤n≤10002≤n≤1000,数组中每个数的大小 0<val≤10000000<val≤1000000。一个整型数组里除了两个数字只出现一次,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。总结:不难,只是给vector排序那里,可以直接调用sort,不需要自己写。要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)提示:输出时按非降序排列。原创 2023-09-03 17:24:15 · 76 阅读 · 0 评论 -
数组元素出现次数超过数组长度一半
例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。数据范围:n≤50000n≤50000,数组中元素的值 0≤val≤100000≤val≤10000。给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。要求:空间复杂度:O(1)O(1),时间复杂度 O(n)O(n)总结:理解哈希key和value的映射关系,和访问方式。保证数组输入非空,且保证有解。原创 2023-09-03 16:16:33 · 115 阅读 · 0 评论 -
两数之和(哈希)
数据范围:2≤len(numbers)≤1052≤len(numbers)≤105,−10≤numbersi≤109−10≤numbersi≤109,0≤target≤1090≤target≤109。总结:用到哈希和数组,理解哈希的存储原理,可以通过key值获取value值,不再是传统的下标获取。因为 2+4=6 ,而 2的下标为2 , 4的下标为3 ,又因为 下标2 < 下标3 ,所以返回[2,3]要求:空间复杂度 O(n)O(n),时间复杂度 O(nlogn)O(nlogn)原创 2023-09-03 15:44:10 · 52 阅读 · 0 评论 -
比较版本号
例如,"1.1"的版本号小于"1.1.1"。因为"1.1"的版本号相当于"1.1.0",第3位修订号的下标为0,小于1。版本号是由修订号组成,修订号与修订号之间由一个"."连接。1个修订号可能有多位数字组成,修订号可能包含前导0,且是合法的。一. 比较版本号时,请按从左到右的顺序依次比较它们的修订号。version1 和 version2 的修订号不会超过int的表达范围,即不超过 32 位整数 的范围。修订号从左到右编号,下标从0开始,最左边的修订号下标为0,下一个修订号下标为1,以此类推。原创 2023-09-03 12:39:45 · 104 阅读 · 0 评论 -
数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。要求:空间复杂度 O(n)O(n),时间复杂度 O(nlogn)O(nlogn)数据范围: 对于 50%50% 的数据, size≤104size≤104。对于 100%100% 的数据, size≤105size≤105。数组中所有数字的值满足 0≤val≤1090≤val≤109。题目保证输入的数组中没有的相同的数字。原创 2023-09-02 22:08:41 · 54 阅读 · 0 评论 -
二维数组中的查找
在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。数据范围:矩阵的长宽满足 0≤n,m≤5000≤n,m≤500 , 矩阵中的值满足 0≤val≤1090≤val≤109。进阶:空间复杂度 O(1)O(1) ,时间复杂度 O(n+m)O(n+m)总结:我这个方法比较简单,就是暴力遍历,可以用二分法拓展。给定 target = 3,返回 false。原创 2023-08-31 11:39:28 · 45 阅读 · 0 评论 -
二分查找法
给定一个 元素升序的、无重复数字的整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标(下标从 0 开始),否则返回 -1。总结:这里面有很多细节,比如二分是(begin+end)/2,缩区间的时候是begin+1,end-1,还有end的初始下标是size()-1,都是细节,思想不难,但注意细节。数据范围:0≤len(nums)≤2×1050≤len(nums)≤2×105 , 数组中任意值满足 ∣val∣≤109∣val∣≤109。原创 2023-08-31 10:44:17 · 46 阅读 · 0 评论 -
两个栈实现队列vs两个队列实现栈
请你仅使用两个队列实现一个后入先出的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty),输入数据保证 pop、top函数操作时,栈中一定有元素。要求:存储n个元素的空间复杂度为 O(n)O(n) ,插入与删除的时间复杂度都是 O(1)O(1)输入: ["MTY","PSH1","TOP","MTY"]"MTY"表示当前栈是不是为空=>当前不为空,返回"false""MTY"表示当前栈是不是为空=>当前为空,返回"true"输出: ["true","1","false"]原创 2023-08-31 09:51:19 · 51 阅读 · 0 评论 -
计算某字符出现次数
写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出输入字符串中该字符的出现次数。(不区分大小写字母)第一行输入一个由字母、数字和空格组成的字符串,第二行输入一个字符(保证该字符不为空格)。输出输入字符串中含有该字符的个数。(不区分大小写字母)数据范围: 1≤n≤1000 1≤n≤1000。知识点:getline只能获取第一次的一行输入。注意两次输入最后转化大小写统一。cin获取第二次的输入。原创 2023-08-26 17:54:09 · 64 阅读 · 0 评论 -
字符串最后一个单词的长度
计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾)输入一行,代表要计算的字符串,非空,长度小于5000。输出一个整数,表示输入字符串最后一个单词的长度。知识点:getline获取一行数据。strrchr直接从结尾开始找。原创 2023-08-26 17:15:21 · 47 阅读 · 0 评论