avatar
文章
169
标签
38
分类
4

首页
归档
标签
分类
面试资料
首页
归档
标签
分类

面试资料

划分字母区间
发表于2025-02-11|算法leetcode
划分字母区间给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。 注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。 返回一个表示每个字符串片段的长度的列表。 示例 1: 123456输入:s = "ababcbacadefegdehijhklij"输出:[9,7,8]解释:划分结果为 "ababcbaca"、"defegde"、"hijhklij" 。每个字母最多出现在一个片段中。像 "ababcbacadefegde", "hijhklij" 这样的划分是错误的,因为划分的片段数较少。 示例 2: 12输入:s = "eccbbbbdec"输出:[10] 提示: 1 <= s.length <= 500 s 仅由小写英文字母组成 题目本质就是合并区间,统计每个字母出现的第一个位置和最后一个位置,将有重叠的区间合并起来。 因为字母的下标是天然有序的,所以只需 ...
跳跃游戏
发表于2025-02-10|算法leetcode
跳跃游戏给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。 示例 1: 123输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。 示例 2: 123输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。 提示: 1 <= nums.length <= 104 0 <= nums[i] <= 105 遍历数组,维护一个能到达的最远距离变量maxRange,如果当前遍历到的位置大于上一个maxRange说明此位置不可达,返回fakse 12345678910111213class Solution { public boolean canJump(int[] nums) &# ...
买卖股票的最佳时机
发表于2025-02-09|算法leetcode
买卖股票的最佳时机给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。 示例 1: 1234输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。 示例 2: 123输入:prices = [7,6,4,3,1]输出:0解释:在这种情况下, 没有交易完成, 所以最大利润为 0。 提示: 1 <= prices.length <= 105 0 <= prices[i] <= 104 第i天卖出股票赚到的最大利润等于当前股票价格减去之前股票的最低价格 12345678910111213141516c ...
数据流的中位数
发表于2025-02-09|算法leetcode
数据流的中位数中位数是有序整数列表中的中间值。如果列表的大小是偶数,则没有中间值,中位数是两个中间值的平均值。 例如 arr = [2,3,4] 的中位数是 3 。 例如 arr = [2,3] 的中位数是 (2 + 3) / 2 = 2.5 。 实现 MedianFinder 类: MedianFinder() 初始化 MedianFinder 对象。 void addNum(int num) 将数据流中的整数 num 添加到数据结构中。 double findMedian() 返回到目前为止所有元素的中位数。与实际答案相差 10-5 以内的答案将被接受。 示例 1: 12345678910111213输入["MedianFinder", "addNum", "addNum", "findMedian", "addNum", "findMedian"][[], [1], [2], [], [3], []]输出[null, null, null, 1.5, n ...
前K个高频元素
发表于2025-02-09|算法leetcode
前K个高频元素给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 示例 1: 12输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2] 示例 2: 12输入: nums = [1], k = 1输出: [1] 提示: 1 <= nums.length <= 105 k 的取值范围是 [1, 数组中不相同的元素的个数] 题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的 进阶:你所设计算法的时间复杂度 必须 优于 O(n log n) ,其中 n 是数组大小。 统计出来每个元素出现的频率和最大频率maxFre。每轮循环遍历整个哈希表找到频率为maxFre的元素加入答案,循环结束之后maxFre--,直到找到前K个元素。 因为数据范围很大,所以为了节省空间可以找到数组中的最大值和最小值,都减去最小值,将下标映射到从0开始 123456789101112131415161718192021222324252627282930313233class Soluti ...
数组中的第K个最大元素
发表于2025-02-08|算法leetcode
数组中的第K个最大元素给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 12输入: [3,2,1,5,6,4], k = 2输出: 5 示例 2: 12输入: [3,2,3,1,2,4,5,5,6], k = 4输出: 4 提示: 1 <= k <= nums.length <= 105 -104 <= nums[i] <= 104 使用快速选择算法,快速选择每一趟结束之后,就找到了哨兵最终的位置,并且哨兵左边的所有元素都小于等于哨兵,右边的元素都大于等于哨兵,跟据下标判断要返回的元素在左边还是右边,只递归其中一边,平均时间复杂度是O(n) 123456789101112131415161718192021222324252627class Solution { int n = 0; public int findKthLargest(int[] n ...
柱状图中最大的矩形
发表于2025-02-08|算法leetcode
柱形图中最大的矩形给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例 1: 123输入:heights = [2,1,5,6,2,3]输出:10解释:最大的矩形为图中红色区域,面积为 10 示例 2: 12输入: heights = [2,4]输出: 4 提示: 1 <= heights.length <=105 0 <= heights[i] <= 104 用每个柱子的长度都作为高求出最大矩形面积就是答案。高度已经确定了就是柱子的高,宽度是从该柱子向左向右出发能扩展多少距离。当遇到左边第一个比它低的柱子停下来,遇到右边第一个比他低的柱子停下来,这就是最大的宽度。问题就变成了求元素左右两边距离最近的小于元素的值,用单调栈解决。 1234567891011121314151617181920212223242526272829303132333435363738394041class Solution { public int largestR ...
每日温度
发表于2025-02-07|算法leetcode
每日温度给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 示例 1: 12输入: temperatures = [73,74,75,71,69,72,76,73]输出: [1,1,4,2,1,1,0,0] 示例 2: 12输入: temperatures = [30,40,50,60]输出: [1,1,1,0] 示例 3: 12输入: temperatures = [30,60,90]输出: [1,1,0] 提示: 1 <= temperatures.length <= 105 30 <= temperatures[i] <= 100 单调栈用来快速求出某个元素左边比它小(大)的最近元素,和右边比它小(大)的最近元素。 对于大压小的栈(求更小的元素): 如果当前元素比栈顶大,直接入栈 如果当前元素比栈顶小,将栈顶元素弹出,当前元素为栈顶元素的右边更小的最近元素,新栈顶元素为原栈顶 ...
字符串解码
发表于2025-02-07|算法leetcode
字符串解码给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。 你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。 此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。 示例 1: 12输入:s = "3[a]2[bc]"输出:"aaabcbc" 示例 2: 12输入:s = "3[a2[c]]"输出:"accaccacc" 示例 3: 12输入:s = "2[abc]3[cd]ef"输出:"abcabccdcdcdef" 示例 4: 12输入:s = "abc3[cd]xyz"输出:"abccdcdcdxyz" 提示: 1 <= s.length <= 30 s ...
最小栈
发表于2025-02-07|算法leetcode
最小栈设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素val推入堆栈。 void pop() 删除堆栈顶部的元素。 int top() 获取堆栈顶部的元素。 int getMin() 获取堆栈中的最小元素。 示例 1: 12345678910111213141516输入:["MinStack","push","push","push","getMin","pop","top","getMin"][[],[-2],[0],[-3],[],[],[],[]]输出:[null,null,null,null,-3,null,0,-2]解释:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);mi ...
1234…17
avatar
范小勤
文章
169
标签
38
分类
4
Follow Me
公告
This is my Blog
最新文章
验证二叉搜索树2025-02-26
寻找重复数2025-02-17
下一个排列2025-02-17
颜色分类2025-02-16
只出现一次的数字2025-02-16
分类
  • 八股文11
  • 算法155
    • acwing22
    • leetcode133
标签
区间和 Trie 二叉树 模拟 完全背包 DFS 位运算 BFS 链表 优先队列 二叉搜索树 拓扑排序 哈希 01背包 栈 双向链表 差分 图论 摩尔投票 双指针 贪心 单调队列 桶排序 kmp 滑动窗口 并查集 前缀积 矩阵 递归 归并排序 单调栈 高精度 记忆化搜索 集合 二分 前缀和 动态规划 快速排序
归档
  • 二月 202543
  • 一月 202554
  • 十二月 202414
  • 九月 20241
  • 四月 202418
  • 三月 202419
  • 二月 202420
网站资讯
文章数目 :
169
本站访客数 :
本站总访问量 :
最后更新时间 :
©2020 - 2025 By 范小勤
框架 Hexo|主题 Butterfly