面试题
文章平均质量分 61
面试经典150题
小菜鸡成长计划
这个作者很懒,什么都没留下…
展开
-
面试经典150题——除自身以外数组的乘积
我们不必将所有数字的乘积除以给定索引处的数字得到相应的答案,而是利用索引左侧所有数字的乘积和右侧所有数字的乘积(即前缀与后缀)相乘得到答案。对于给定索引 iii,我们将使用它左边所有数字的乘积乘以右边所有数字的乘积。下面让我们更加具体的描述这个算法。的额外空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组。之中任意元素的全部前缀元素和后缀的乘积都在。时间复杂度内完成此题。之外其余各元素的乘积。转载 2023-08-11 23:24:00 · 37 阅读 · 0 评论 -
面试经典150题——罗马数字转整数
数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。同样地,数字 9 表示为。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做。给定一个罗马数字,将其转换成整数。,即为两个并列的 1。原创 2023-08-14 17:14:55 · 1443 阅读 · 0 评论 -
面试经典150题——反转字符串中的单词
中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。如果字符串在你使用的编程语言中是一种可变数据类型,请尝试使用。反转后的字符串中不能存在前导空格和尾随空格。中使用至少一个空格将字符串中的。之间用单个空格连接的结果字符串。反转字符和去除空格可以一起完成。是由非空格字符组成的字符串。转载 2023-08-14 22:22:22 · 60 阅读 · 0 评论 -
面试经典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 · 39 阅读 · 0 评论 -
面试经典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 · 38 阅读 · 0 评论 -
面试经典150题——找出字符串中第一个匹配项的下标
"leeto" 没有在 "leetcode" 中出现,所以返回 -1。匹配失败:枚举原串的下一个「发起点」,重新尝试匹配。字符串的第一个匹配项的下标(下标从 0 开始)。匹配成功:返回本次匹配的原串「发起点」。第一个匹配项的下标是 0 ,所以返回 0。"sad" 在下标 0 和 6 处匹配。转载 2023-08-14 23:16:41 · 34 阅读 · 0 评论 -
面试经典150题——整数转罗马数字
遍历 valueSymbols 中的每个数值-符号对,若当前数值 value不超过 num,则从 num中不断减去 value,直至 num 小于 value,然后遍历下一个数值-符号对。根据罗马数字的唯一表示法,为了表示一个给定的整数 num,我们寻找不超过 num 的最大符号值,将 num 减去该符号值,然后继续寻找不超过 num 的最大符号值,将该符号拼接在上一个找到的符号之后,循环直至 num 为 0。我们用来确定罗马数字的规则是:对于罗马数字从左到右的每一位,选择尽可能大的符号值。转载 2023-08-14 18:28:04 · 29 阅读 · 0 评论 -
面试经典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 · 72 阅读 · 0 评论 -
面试经典150题——最长公共前缀
基于该结论,可以得到一种查找字符串数组中的最长公共前缀的简单方法。依次遍历字符串数组中的每个字符串,对于每个遍历到的字符串,更新最长公共前缀,当遍历完所有的字符串以后,即可得到字符串数组中的最长公共前缀。如果在尚未遍历完所有的字符串时,最长公共前缀已经是空串,则最长公共前缀一定是空串,因此不需要继续遍历剩下的字符串,直接返回空串即可。Sn) 表示字符串 S1…Sn 的最长公共前缀。编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串。输入不存在公共前缀。转载 2023-08-14 19:27:51 · 40 阅读 · 0 评论 -
面试经典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 · 34 阅读 · 0 评论 -
面试经典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 · 38 阅读 · 0 评论 -
面试经典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 · 50 阅读 · 0 评论 -
面试经典150题——跳跃游戏Ⅱ
从下标为 0 跳到下标为 1 的位置,跳。记录跳跃次数,如果跳到了终点,就得到了结果。向前跳转的最大长度。生成的测试用例可以到达。跳到最后一个位置的最小跳跃数是。步到达数组的最后一个位置。处,你可以跳转到任意。转载 2023-08-10 22:11:02 · 41 阅读 · 0 评论 -
面试经典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 · 33 阅读 · 0 评论 -
面试经典150题——加油站
找到最低点后,如果有解,那么解就是最低点的下一个点,因为总(gas-cost)是大于等于0的,所以前面损失的gas我从最低点下一个点开始都会拿回来(亏空最严重的一个点必须放在最后一步走,等着前面剩余的救助),别管后面的趋势是先加后减还是先减后加,最终结果我是能填平前面的坑的。下图的 黑色折线图即总油量剩余值,若要满足题目的要求:跑完全程再回到起点,总油量剩余值 的任意部分都需要在 X 轴以上,且跑到终点时:总剩余汽油量 >= 0。开往 3 号加油站,你需要消耗 5 升汽油,正好足够你返回到 3 号加油站。转载 2023-08-12 22:21:01 · 108 阅读 · 0 评论 -
面试经典150题——跳跃游戏
无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回。给你一个非负整数数组。转载 2023-08-10 21:31:08 · 48 阅读 · 0 评论 -
面试经典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 · 63 阅读 · 0 评论 -
面试经典150题——轮转数组
给定一个整数数组nums,将数组中的元素向右轮转k个位置,其中k是非负数。向右轮转 1 步:向右轮转 2 步:向右轮转 3 步:向右轮转 1 步: [99,-1,-100,3]向右轮转 2 步: [3,99,-1,-100]转载 2023-08-03 22:20:33 · 40 阅读 · 0 评论 -
面试经典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 · 72 阅读 · 0 评论