- 博客(67)
- 收藏
- 关注
转载 面试经典150题——验证回文字符串
初始时,左右指针分别指向 sgood的两侧,随后我们不断地将这两个指针相向移动,每次移动一步,并判断这两个指针指向的字符是否相同。由于我们需要将所有的字母和数字字符存放在另一个字符串中,在最坏情况下,新的字符串 sgood与原字符串 s完全相同,因此需要使用O(|s|)的空间。最简单的方法是对字符串 sss 进行一次遍历,并将其中的字母和数字字符进行保留,放在另一个字符串 sgood 中。时间复杂度:O(|s|),其中 |s| 是字符串 s 的长度。在移除非字母数字字符之后,s 是一个空字符串 ""。
2023-08-23 23:26:28 227
转载 面试经典150题——两数之和Ⅱ(输入有序数组)
由于 A[1] 已经是当前搜索空间最小的数了,其他的数跟 A[7] 相加的话,和只会更大。由于 A[7] 已经是最大的数了,其他的数跟 A[0] 相加,和只会更小。、A[0] + A[1] 也都小于 target,这些都是不合要求的解,可以一次排除。可以看到,搜索空间的大小是 O(n^2)数量级的。可以看到,无论 A[i] + A[j] 的结果是大了还是小了,我们都可以排除掉一行或者一列的搜索空间。一开始,我们检查右上方单元格 (0,7),即计算 A[0] + A[7] ,与 target 进行比较。
2023-08-23 23:01:33 214
转载 面试经典150题——盛最多水的容器
假设状态 S(i,j) 下 h[i]<h[j],在向内移动短板至 S(i+1,j),则相当于消去了 S(i,j−1),S(i,j−2),...,S(i,i+1)状态集合。设两指针 i , j ,指向的水槽板高度分别为 h[i] , h[j],此状态下水槽面积为 S(i,j)。若向内移动长板 ,水槽的短板 min(h[i],h[j])不变或变小,因此下个水槽的面积一定变小。若向内移动短板 ,水槽的短板 min(h[i],h[j])可能变大,因此下个水槽的面积可能增大。底边宽度:相比 S(i,j)更短;
2023-08-23 22:38:12 209
转载 面试经典150题——三数之和
这个方法就是我们常说的「双指针」,当我们需要枚举数组中的两个元素时,如果我们发现随着第一个元素的递增,第二个元素是递减的,那么就可以使用双指针的方法,将枚举的时间复杂度从 O(N^2) 减少至 O(N)。这是因为在枚举的过程每一步中,「左指针」会向右移动一个位置(也就是题目中的 b),而「右指针」会向左移动若干个位置,这个与数组的元素有关,但我们知道它一共会移动的位置数为 O(N),均摊下来,每次也向左移动一个位置,因此时间复杂度为 O(N)。这是因为在最坏的情况下,数组中的元素全部为 0,即。
2023-08-23 22:13:58 149
转载 面试经典150题——找出字符串中第一个匹配项的下标
"leeto" 没有在 "leetcode" 中出现,所以返回 -1。匹配失败:枚举原串的下一个「发起点」,重新尝试匹配。字符串的第一个匹配项的下标(下标从 0 开始)。匹配成功:返回本次匹配的原串「发起点」。第一个匹配项的下标是 0 ,所以返回 0。"sad" 在下标 0 和 6 处匹配。
2023-08-14 23:16:41 59
转载 面试经典150题——N字形变换
设 numRows 行字符串分别为 s1 , s2 ,..., sn,则容易发现:按顺序遍历字符串 s 时,每个字符 c 在 Z 字形中对应的行索引 先从 s1增大至 sn,再从 sn减小至 s1……因此,解决方案为:模拟这个行索引的变化,在遍历 s 中把每个字符填到正确的行 res[i]。flag = - flag: 在达到 Z字形转折点时,执行反向。字符串 s 是以 Z字形为顺序存储的字符串,目标是按行打印。空间复杂度 O(N):各行字符串共占用 O(N) 额外空间。
2023-08-14 22:51:04 66
转载 面试经典150题——反转字符串中的单词
中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。如果字符串在你使用的编程语言中是一种可变数据类型,请尝试使用。反转后的字符串中不能存在前导空格和尾随空格。中使用至少一个空格将字符串中的。之间用单个空格连接的结果字符串。反转字符和去除空格可以一起完成。是由非空格字符组成的字符串。
2023-08-14 22:22:22 105
转载 面试经典150题——最长公共前缀
基于该结论,可以得到一种查找字符串数组中的最长公共前缀的简单方法。依次遍历字符串数组中的每个字符串,对于每个遍历到的字符串,更新最长公共前缀,当遍历完所有的字符串以后,即可得到字符串数组中的最长公共前缀。如果在尚未遍历完所有的字符串时,最长公共前缀已经是空串,则最长公共前缀一定是空串,因此不需要继续遍历剩下的字符串,直接返回空串即可。Sn) 表示字符串 S1…Sn 的最长公共前缀。编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串。输入不存在公共前缀。
2023-08-14 19:27:51 68
转载 面试经典150题——整数转罗马数字
遍历 valueSymbols 中的每个数值-符号对,若当前数值 value不超过 num,则从 num中不断减去 value,直至 num 小于 value,然后遍历下一个数值-符号对。根据罗马数字的唯一表示法,为了表示一个给定的整数 num,我们寻找不超过 num 的最大符号值,将 num 减去该符号值,然后继续寻找不超过 num 的最大符号值,将该符号拼接在上一个找到的符号之后,循环直至 num 为 0。我们用来确定罗马数字的规则是:对于罗马数字从左到右的每一位,选择尽可能大的符号值。
2023-08-14 18:28:04 50
原创 面试经典150题——罗马数字转整数
数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。同样地,数字 9 表示为。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做。给定一个罗马数字,将其转换成整数。,即为两个并列的 1。
2023-08-14 17:14:55 1556
转载 面试经典150题——接雨水
上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。也就是红色区域中的水,数组是 height = [ 0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1 ]。也就是红色区域中的水,数组是 height = [ 0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1 ]。原则是高度小于 1,temp ++,高度大于等于 1,ans = ans + temp,temp = 0。
2023-08-14 17:10:49 115
转载 面试经典150题——分发糖果
具体地,以左规则为例:我们从左到右遍历该数组,假设当前遍历到位置 i,如果有 ratings[i−1]<ratings[i]那么i号学生的糖果数量将比 i−1号孩子的糖果数量多,我们令 left[i]=left[i−1]+1即可,否则我们令 left[i]=1。我们遍历该数组两次,处理出每一个学生分别满足左规则或右规则时,最少需要被分得的糖果数量。在实际代码中,我们先计算出左规则 left 数组,在计算右规则的时候只需要用单个变量记录当前位置的右规则,同时计算答案即可。这句话拆分为两个规则,分别处理。
2023-08-12 23:26:06 61
转载 面试经典150题——加油站
找到最低点后,如果有解,那么解就是最低点的下一个点,因为总(gas-cost)是大于等于0的,所以前面损失的gas我从最低点下一个点开始都会拿回来(亏空最严重的一个点必须放在最后一步走,等着前面剩余的救助),别管后面的趋势是先加后减还是先减后加,最终结果我是能填平前面的坑的。下图的 黑色折线图即总油量剩余值,若要满足题目的要求:跑完全程再回到起点,总油量剩余值 的任意部分都需要在 X 轴以上,且跑到终点时:总剩余汽油量 >= 0。开往 3 号加油站,你需要消耗 5 升汽油,正好足够你返回到 3 号加油站。
2023-08-12 22:21:01 198
转载 面试经典150题——除自身以外数组的乘积
我们不必将所有数字的乘积除以给定索引处的数字得到相应的答案,而是利用索引左侧所有数字的乘积和右侧所有数字的乘积(即前缀与后缀)相乘得到答案。对于给定索引 iii,我们将使用它左边所有数字的乘积乘以右边所有数字的乘积。下面让我们更加具体的描述这个算法。的额外空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组。之中任意元素的全部前缀元素和后缀的乘积都在。时间复杂度内完成此题。之外其余各元素的乘积。
2023-08-11 23:24:00 114
转载 面试经典150题——O(1)时间插入、删除和获取随机元素
对于 insert 和 remove 操作容易想到使用「哈希表」来实现 O(1) 复杂度,但对于 getRandom 操作,比较理想的情况是能够在一个数组内随机下标进行返回。因此我们需要申请一个足够大的数组 nums(利用数据范围为 2∗10^5),并使用变量 idx 记录当前使用到哪一位(即下标在 [0,idx]范围内均是存活值)。// 由于 2 是集合中唯一的数字,getRandom 总是返回 2。// 返回 false ,表示集合中不存在 2。// 2 已在集合中,所以返回 false。
2023-08-11 22:17:47 78
转载 面试经典150——H指数
根据 H\text{H}H 指数的定义,如果当前 H\text{H}H 指数为 hhh 并且在遍历过程中找到当前值 citations[i]>h\textit{citations}[i] > hcitations[i]>h,则说明我们找到了一篇被引用了至少 h+1h+1h+1 次的论文,所以将现有的 hhh 值加 111。根据定义,我们可以发现 H\text{H}H 指数不可能大于总的论文发表数,所以对于引用次数超过论文发表数的情况,我们可以将其按照总的论文发表数来计算即可。篇论文被引用的次数。
2023-08-10 23:09:52 119
转载 面试经典150题——跳跃游戏Ⅱ
从下标为 0 跳到下标为 1 的位置,跳。记录跳跃次数,如果跳到了终点,就得到了结果。向前跳转的最大长度。生成的测试用例可以到达。跳到最后一个位置的最小跳跃数是。步到达数组的最后一个位置。处,你可以跳转到任意。
2023-08-10 22:11:02 87
转载 面试经典150题——跳跃游戏
无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回。给你一个非负整数数组。
2023-08-10 21:31:08 98
原创 面试经典150题——买卖股票的最佳时机Ⅱ
随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。终止的时候,上面也分析了,输出 dp[len - 1][0],因为一定有 dp[len - 1][0] > dp[len - 1][1]。写代码的时候,可以不用对最后一天单独处理,输出最后一天,状态为 0 的时候的值即可。
2023-08-03 23:22:09 154
转载 面试经典150题——轮转数组
给定一个整数数组nums,将数组中的元素向右轮转k个位置,其中k是非负数。向右轮转 1 步:向右轮转 2 步:向右轮转 3 步:向右轮转 1 步: [99,-1,-100,3]向右轮转 2 步: [3,99,-1,-100]
2023-08-03 22:20:33 66
转载 面试经典150题——多数元素
我们同样也可以在遍历数组 nums 时候使用打擂台的方法,维护最大的值,这样省去了最后对哈希映射的遍历。对于哈希映射中的每个键值对,键表示一个元素,值表示该元素出现的次数。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。我们知道出现次数最多的元素大于 ⌊n2⌋⌊2n⌋ 次,所以可以用哈希表来快速统计每个元素出现的次数。进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。输入:nums = [2,2,1,1,1,2,2]输入:nums = [3,2,3]
2023-07-26 00:30:26 56
转载 面试经典150题——删除有序数组中的重复项 II
具体地,我们定义两个指针 slow和 fast分别为慢指针和快指针,其中慢指针表示处理出的数组的长度,快指针表示已经检查过的数组的长度,即 nums[fast]表示待检查的第一个元素,nums[slow−1]为上一个应该被保留的元素所移动到的指定位置。解释:函数应返回新长度 length = 7, 并且原数组的前五个元素被修改为 0, 0, 1, 1, 2, 3, 3。输入:nums = [0,0,1,1,1,1,2,3,3]输出:7, nums = [0,0,1,1,2,3,3]
2023-07-19 18:35:52 77
原创 面试经典150题——合并两个有序数组
输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3。合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。输入:nums1 = [0], m = 0, nums2 = [1], n = 1。输入:nums1 = [1], m = 1, nums2 = [], n = 0。解释:需要合并 [1,2,3] 和 [2,5,6]。解释:需要合并的数组是 [] 和 [1]。输出:[1,2,2,3,5,6]
2023-07-19 18:13:34 70
原创 蓝桥杯练习【递归】——Sine之舞
题目描述:最近FJ为他的奶牛们开设了数学分析课,FJ知道若要学好这门课,必须有一个好的三角函数基本功。所以他准备和奶牛们做一个“Sine之舞”的游戏,寓教于乐,提高奶牛们的计算能力。不妨设An=sin(1–sin(2+sin(3–sin(4+...sin(n))...)Sn=(...(A1+n)A2+n-1)A3+...+2)An+1FJ想让奶牛们计算Sn的值,请你帮助FJ打印出Sn的完整表达式,以方便奶牛们做题。输入:仅有一个数:N<201。输出:请输出相应的表达式Sn,
2022-04-02 21:20:49 130
原创 蓝桥杯练习【递归】——母牛的故事
题目描述:有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?输入:输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。n=0表示输入数据的结束,不做处理。输出:对于每个测试实例,输出在第n年的时候母牛的数量。每个输出占一行。样例输入:2450样例输出:246参考代码:#include<iostrea
2022-04-02 19:32:04 135
原创 第十三届蓝桥杯省赛模拟赛
一、填空题1.问题描述以下是一个 25 行 25 列的字母矩阵,全部由字母 A 和 B 组成。AAAAAAABABBAABABABAAAAAAAABBBBBABBAABBBBBABABBBBBAABAAABABBBABAABBBBABAAABAABAAABABBBBBAABAABABAAABAABAAABABBABABBABABABAAABAABBBBBABBBABAABBBBABBBBBAAAAAAAABABABABABABAAAAAAABBBBBBBBABAABABBBBBB
2022-03-29 21:06:53 893 6
原创 蓝桥杯练习【数论基础】——Hankson的趣味题
题目描述:问题描述Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫Hankson。现 在,刚刚放学回家的Hankson 正在思考一个有趣的问题。 今天在课堂上,老师讲解了如何求两个正整数c1 和c2 的最大公约数和最小公倍数。现 在Hankson 认为自己已经熟练地掌握了这些知识,他开始思考一个“求公约数”和“求公倍数”之类问题的“逆问题”,这个问题是这样的:已知正整数a0,a1,b0,b1,设某未知正整数x 满足: 1.x和a0 的最大公...
2022-03-24 17:11:15 176
转载 蓝桥杯练习【数论基础】——欧拉函数
题目描述:给定一个大于1,不超过2000000的正整数n,输出欧拉函数,phi(n)的值。如果你并不了解欧拉函数,那么请参阅提示。提示欧拉函数phi(n)是数论中非常重要的一个函数,其表示1到n-1之间,与n互质的数的个数。显然的,我们可以通过定义直接计算phi(n)。当然,phi(n)还有这么一种计算方法。首先我们对n进行质因数分解,不妨设n=p1^a1 * p2^a2 * ... * pk^ak (这里a^b表示a的b次幂,p1到pk为k个互不相同的质数,a1到ak均为正整数...
2022-03-23 18:34:30 481
原创 蓝桥杯练习【数论基础】——水仙花
题目描述:判断给定的三位数是否 水仙花 数。所谓 水仙花 数是指其值等于它本身 每位数字立方和的数。例 153 就是一个 水仙花 数。 153=1+125+27输入:一个整数。数据规模和约定一个三位的整数,是水仙花数输出"YES",否则输出" NO"输出:是水仙花数,输出" YES" ,否则输出" NO" (不包括引号)样例输入:123 样例输出:NO参考代码:#include<bits/stdc++.h> using namespace
2022-03-23 17:55:50 211
原创 蓝桥杯练习【数论基础】——完数
题目描述:一个数如果恰好等于它的因子之和,这个数就称 为“完数”。例如,6的因子为1、2、3,而6=1+2+3,因此6就是“完数”。又如,28的因子为1、2、4、7、14,而 28=1+2+4+7+14,因此28也是“完数”。编写一个程序,判断用户输入的一个数是否为“完数”。输入:输入只有一行,即一个整数。输出:输出只有一行,如果该数为完数,输出yes,否则输出no。样例输入:6 样例输出:yes参考代码:#include<bits/stdc++.h&
2022-03-23 17:42:18 185
原创 蓝桥杯练习【数论基础】——一元三次方程求解
题目描述:有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差的绝对值> =1。要求三个实根。输入:四个实数:a,b,c,d数据规模和约定|a|,|b|,|c|,|d|< =20输出:由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后2位样例输入:1 -5 -4 20样例输出:-2.00 2.
2022-03-23 16:33:18 368
转载 蓝桥杯练习【数论基础】——素数求和
题目描述:输入一个自然数n,求小于等于n的素数之和输入:数据规模和约定测试样例保证 2 < = n < = 2,000,000输出:无样例输入:2样例输出:2参考代码:
2022-03-23 15:07:01 753
转载 蓝桥杯练习【数论基础】——找素数
题目描述:给定区间[L, R] , 请计算区间中素数的个数。输入:两个数L和R。数据规模和约定2 < = L < = R < = 2147483647 R-L < = 1000000输出:一行,区间中素数的个数。样例输入:2 11样例输出:5参考代码:/* 分析: 首先,判断素数,使用埃式筛法 其次,区间范围过大,不能用下标表示所有数字, 思路: ...
2022-03-22 22:09:09 703
原创 蓝桥杯练习【数论基础】——一元一次方程
题目描述:输入一元一次方法的ax+b=0的解。且数据均在double类型以内,且一定有解(保留2位小数)输入:a b两个数输出:x的值样例输入:2 6样例输出:-3.00参考代码:#include<bits/stdc++.h> using namespace std;int main(){ double a, b, x; scanf("%lf%lf", &a, &b); x = (-b) / a;
2022-03-21 21:15:09 141
原创 蓝桥杯练习【数论基础】——Torry的困惑(提高型)
题目描述:Torry从小喜爱数学。一天,老师告诉他, 像2、3、5、7……这样的数叫做质数。Torry突然想到一个问题,前10、100、1000、10000……个质数的乘积是多少呢?他把这个问题告诉 老师。老师愣住了,一时回答不出来。于是Torry求助于会编程的你,请你算出前n个质数的乘积。不过,考虑到你才接触编程不久,Torry只要你算出这 个数模上50000的值。输入:仅包含一个正整数n,其中n< =100000。输出:输出一行,即前n个质数的乘积模50000的值。...
2022-03-21 21:07:14 109
转载 蓝桥杯练习【数论基础】——矩阵乘法
题目描述:给定一个N阶矩阵A,输出A的M次幂(M是非负整数)例如:A =1 23 4A的2次幂7 1015 22输入:第一行是一个正整数N、M(1< =N< =30, 0< =M< =5),表示矩阵A的阶数和要求的幂数接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值输出:输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开样例输入:2 2 1 2 3 4 样例输出:7...
2022-03-21 18:46:22 80
转载 蓝桥杯练习【数论基础】——矩形面积交
题目描述:平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。输入:输入仅包含两行,每行描述一个矩形。在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。输出:输出仅包含一个实数,为交的面积,保留到小数后两位。样例输入:1 1 3 3 2 2 4 4 样例输出:1.00参考代码:#include<bits/stdc++.h..
2022-03-20 21:56:58 131
原创 蓝桥杯练习【数论基础】——分解质因数
题目描述:求出区间[a,b]中所有整数的质因数分解。提示先筛出所有素数,然后再分解。数据规模和约定输入:输入两个整数a,b。2< =a< =b< =10000输出:每行输出一个数的分解,形如k=a1*a2*a3...(a1< =a2< =a3...,k也是从小到大的)(具体可看样例)样例输入:3 10样例输出:3=34=2*25=56=2*37=78=2*2*29=3*310=2*5参考代码:#in..
2022-03-20 20:50:32 397
原创 蓝桥杯练习【数论基础】——用筛法求之N内的素数
题目描述:用筛法求之N内的素数。输入:N输出:0~N的素数样例输入:100样例输出:2357111317192329313741434753596167717379838997参考代码:#include<bits/stdc++.h> using namespace std;int main(){ int n,i,j; scanf("%d",&n); for(i
2022-03-20 18:22:22 193
原创 蓝桥杯练习【排序】——选择排序
题目描述:排序,顾名思义,是将若干个元素按其大小关系排出一个顺序。形式化描述如下:有n个元素a[1],a[2],…,a[n],从小到大排序就是将它们排成一个新顺序a[i[1]]< a[i[2]]< …< a[i[n]]i[k]为这个新顺序。选择排序的思想极其简单,每一步都把一个最小元素放到前面,如果有多个相等的最小元素,选择排位较考前的放到当前头部。还是那个例子:{3 1 5 4 2}:第一步将1放到开头(第一个位置),也就是交换3和1,即swap(a[0],a[1])得...
2022-03-20 16:55:54 415
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人