爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      面试算法题 - 滑动窗口

      首页 知识中心 软件开发 文章详情页

      面试算法题 - 滑动窗口

      2025-02-19 09:02:32 阅读次数:12

      nums,元素,列表,哈希,序列,滑动,窗口

              最长和谐子序列、重复的DNA序列、找到字符串中所有字母异位词、滑动窗口最大值、最小区间。每题做详细思路梳理,配套Python&Java双语代码, 2024.03.06 可通过leetcode所有测试用例。

      594. 最长和谐子序列

              和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。

              现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度。

              数组的子序列是一个由数组派生出来的序列,它可以通过删除一些元素或不删除元素、且不改变其余元素的顺序而得到。

       

      示例 1:

      输入:nums = [1,3,2,2,5,2,3,7]
      输出:5
      解释:最长的和谐子序列是 [3,2,2,2,3]
      示例 2:

      输入:nums = [1,2,3,4]
      输出:2
      示例 3:

      输入:nums = [1,1,1,1]
      输出:0
       

      提示:

      1 <= nums.length <= 2 * 104
      -109 <= nums[i] <= 109

       

       

      解题思路

              对于这个题目,尽管看起来像是需要使用滑动窗口技术,但实际上它更适合使用哈希表来解决。原因在于我们需要追踪数组中每个元素的出现次数,并快速计算最大值和最小值之差为1的子序列长度。滑动窗口技术更适合于连续子数组问题,而这里的子序列不要求连续,因此直接使用滑动窗口技术可能不是最优解。

      1. 使用哈希表记录数组中每个数字出现的次数。
      2. 遍历哈希表,对于哈希表中的每个键值对(num, count),检查num + 1是否也在哈希表中。
      3. 如果num + 1也在哈希表中,那么count + hashMap[num + 1]就是以num和num + 1为元素的和谐子序列的长度。
      4. 更新记录的最长和谐子序列长度。

      完整代码

      Java

      public class Solution {
          public int findLHS(int[] nums) {
              HashMap<Integer, Integer> hashMap = new HashMap<>();  // 创建HashMap用于存储每个数字及其出现次数
              for (int num : nums) {
                  // 如果num已存在于HashMap中,则增加其计数;否则,添加num到HashMap并设置计数为1
                  hashMap.put(num, hashMap.getOrDefault(num, 0) + 1);
              }
              int maxLength = 0;  // 初始化最长和谐子序列长度为0
              for (int key : hashMap.keySet()) {
                  // 检查key+1是否也存在于HashMap中
                  if (hashMap.containsKey(key + 1)) {
                      // 如果存在,则计算包含key和key+1的和谐子序列长度,并更新最长长度
                      maxLength = Math.max(maxLength, hashMap.get(key) + hashMap.get(key + 1));
                  }
              }
              return maxLength;  // 返回最长和谐子序列长度
          }
      }

      Python

      class Solution:
          def findLHS(self, nums: List[int]) -> int:
              hashMap = Counter(nums)  # 使用Counter统计nums中每个数字的出现次数
              maxLength = 0  # 初始化最长和谐子序列长度为0
              for key in hashMap:
                  # 检查key+1是否也在Counter对象中
                  if key + 1 in hashMap:
                      # 如果存在,则计算包含key和key+1的和谐子序列长度,并更新最长长度
                      maxLength = max(maxLength, hashMap[key] + hashMap[key + 1])
              return maxLength  # 返回最长和谐子序列长度

      187. 重复的DNA序列

       

      DNA序列 由一系列核苷酸组成,缩写为 'A', 'C', 'G' 和 'T'.。

      例如,"ACGAATTCCG" 是一个 DNA序列 。
      在研究 DNA 时,识别 DNA 中的重复序列非常有用。

      给定一个表示 DNA序列 的字符串 s ,返回所有在 DNA 分子中出现不止一次的 长度为 10 的序列(子字符串)。你可以按 任意顺序 返回答案。

       

      示例 1:

      输入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
      输出:["AAAAACCCCC","CCCCCAAAAA"]
      示例 2:

      输入:s = "AAAAAAAAAAAAA"
      输出:["AAAAAAAAAA"]
       

      提示:

      0 <= s.length <= 105
      s[i]=='A'、'C'、'G' or 'T'

       

      解题思路

              我们可以使用滑动窗口加哈希表的方式来解决。我们将滑动窗口的大小设置为10,然后在字符串s上滑动这个窗口,同时使用哈希表来记录每个长度为10的子字符串出现的次数。当我们发现某个子字符串的出现次数超过1时,就将其加入到结果中。

      1. 初始化一个空的哈希表hashMap来存储每个长度为10的子字符串及其出现的次数,以及一个空集合result来存储结果。
      2. 遍历字符串s,对于每个起始位置i,提取长度为10的子字符串sub。
      3. 将sub加入到哈希表中,如果sub已经在哈希表中,则增加其计数。
      4. 如果sub的计数刚好为2(即此前已经出现过一次),将其添加到结果集合中。
      5. 返回结果集合中的所有元素。

      完整代码

      Java

      public class Solution {
          public List<String> findRepeatedDnaSequences(String s) {
              HashMap<String, Integer> hashMap = new HashMap<>();  // 存储每个子字符串及其出现次数
              List<String> result = new ArrayList<>();  // 存储结果
              
              for (int i = 0; i <= s.length() - 10; i++) {
                  String sub = s.substring(i, i + 10);  // 提取长度为10的子字符串
                  hashMap.put(sub, hashMap.getOrDefault(sub, 0) + 1);  // 更新哈希表
                  
                  // 如果子字符串出现次数为2,则添加到结果中
                  if (hashMap.get(sub) == 2) {
                      result.add(sub);
                  }
              }
              
              return result;  // 返回结果
          }
      }

      Python

      class Solution:
          def findRepeatedDnaSequences(self, s: str) -> List[str]:
              seen, repeated = set(), set()  # 初始化seen和repeated集合
              for i in range(len(s) - 9):  # 遍历字符串,确保子字符串长度为10
                  sequence = s[i:i+10]  # 获取当前位置的长度为10的子字符串
                  if sequence in seen:  # 检查子字符串是否已存在于seen集合中
                      repeated.add(sequence)  # 如果是,则添加到repeated集合中
                  else:
                      seen.add(sequence)  # 否则,将其添加到seen集合中
              return list(repeated)  # 将repeated集合转换为列表并返回
      

      438. 找到字符串中所有字母异位词

       

      给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。

      异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。

       

      示例 1:

      输入: s = "cbaebabacd", p = "abc"
      输出: [0,6]
      解释:
      起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。
      起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。
       示例 2:

      输入: s = "abab", p = "ab"
      输出: [0,1,2]
      解释:
      起始索引等于 0 的子串是 "ab", 它是 "ab" 的异位词。
      起始索引等于 1 的子串是 "ba", 它是 "ab" 的异位词。
      起始索引等于 2 的子串是 "ab", 它是 "ab" 的异位词。
       

      提示:

      1 <= s.length, p.length <= 3 * 104
      s 和 p 仅包含小写字母

       

      解题思路

              我们可以使用滑动窗口技术配合哈希表来解决。这个方法有效地跟踪了窗口内各字符的出现频次,并将其与目标字符串p的字符频次进行比较。

      1. 初始化:创建两个哈希表,sCount和pCount,分别用于存储当前窗口内的字符频次和字符串p的字符频次。还需要一个结果列表result来存储所有异位词子串的起始索引。
      2. 填充pCount:遍历字符串p,更新pCount哈希表,记录每个字符的出现次数。
      3. 滑动窗口:使用两个指针,start和end,代表窗口的起始和结束位置。窗口大小与字符串p的长度相同。
      4. 窗口扩展:移动end指针,每次移动时,在sCount中更新end指针指向的字符频次。如果end-start+1小于p的长度,继续移动end指针。
      5. 窗口收缩与检查:一旦窗口大小与p的长度相同,比较sCount和pCount:
        • 如果两个哈希表相等,意味着找到了一个异位词的起始索引,将start添加到结果列表result中。
        • 不管是否找到异位词,都需要从sCount中移除start指针指向的字符(即窗口左边界的字符),然后移动start指针,以收缩窗口并进行下一轮检查。
      6. 返回结果:返回结果列表result。

      完整代码

      Java

      class Solution {
          public List<Integer> findAnagrams(String s, String p) {
              List<Integer> result = new ArrayList<>();
              if (s == null || p == null || s.length() < p.length()) {
                  return result;  // 如果s的长度小于p的长度,直接返回空列表
              }
      
              HashMap<Character, Integer> pCount = new HashMap<>();
              HashMap<Character, Integer> sCount = new HashMap<>();
      
              // 填充pCount哈希表
              for (char ch : p.toCharArray()) {
                  pCount.put(ch, pCount.getOrDefault(ch, 0) + 1);
              }
      
              int start = 0, end = 0;
              while (end < s.length()) {
                  char endChar = s.charAt(end);
                  sCount.put(endChar, sCount.getOrDefault(endChar, 0) + 1);
      
                  // 如果窗口大小等于p的长度
                  if (end - start + 1 == p.length()) {
                      if (sCount.equals(pCount)) {
                          result.add(start);  // 添加当前窗口的起始索引到结果列表
                      }
      
                      char startChar = s.charAt(start);
                      // 从sCount中移除窗口左边界的字符
                      sCount.put(startChar, sCount.get(startChar) - 1);
                      if (sCount.get(startChar) == 0) {
                          sCount.remove(startChar);  // 如果字符频次为0,从计数器中删除
                      }
                      start++;  // 收缩窗口
                  }
                  end++;  // 扩展窗口
              }
      
              return result;
          }
      }

      Python

      class Solution:
          def findAnagrams(self, s: str, p: str) -> List[int]:
              if len(s) < len(p):  # 如果s的长度小于p的长度,直接返回空列表
                  return []
      
              pCount = Counter(p)  # 计算字符串p中各字符的频次
              sCount = Counter()  # 初始化s的字符频次计数器
      
              result = []  # 存储结果的列表
              for i in range(len(s)):
                  sCount[s[i]] += 1  # 更新窗口内字符的频次
                  if i >= len(p):
                      if sCount[s[i - len(p)]] == 1:
                          del sCount[s[i - len(p)]]  # 如果字符频次为1,从计数器中删除
                      else:
                          sCount[s[i - len(p)]] -= 1  # 否则减少字符频次
      
                  if sCount == pCount:  # 如果当前窗口的字符频次与p的字符频次相同
                      result.append(i - len(p) + 1)  # 添加当前窗口的起始索引到结果列表
      
              return result

      239. 滑动窗口最大值

      给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。

      返回 滑动窗口中的最大值 。

       

      示例 1:

      输入:nums = [1,3,-1,-3,5,3,6,7], k = 3
      输出:[3,3,5,5,6,7]
      解释:
      滑动窗口的位置              最大值
      ---------------                      -----
      [1  3  -1] -3  5  3  6  7       3
       1 [3  -1  -3] 5  3  6  7       3
       1  3 [-1  -3  5] 3  6  7       5
       1  3  -1 [-3  5  3] 6  7       5
       1  3  -1  -3 [5  3  6] 7       6
       1  3  -1  -3  5 [3  6  7]      7
      示例 2:

      输入:nums = [1], k = 1
      输出:[1]
       

      提示:

      1 <= nums.length <= 10^5
      -10^4 <= nums[i] <= 10^4
      1 <= k <= nums.length

      解题思路

              这个问题可以通过维护一个双端队列(deque)来有效地解决。双端队列能够从两端以常数时间复杂度进行插入和删除操作。在这个问题中,我们可以利用双端队列来维护滑动窗口内的最大值。

      1. 初始化:创建一个空的双端队列(deque)dq,和一个用于存储结果的列表max_values。
      2. 遍历数组:遍历给定数组nums的每个元素,对于每个元素,执行以下操作:
        • 维护双端队列:
          • 如果双端队列不为空且队列头部的元素(最左侧元素)不在当前滑动窗口内(即索引小于当前元素索引 - 窗口大小),则从队列头部移除该元素。
          • 从队列尾部开始,移除所有小于当前元素nums[i]的元素,因为它们不可能是当前滑动窗口的最大值。
        • 将当前元素索引添加到双端队列尾部。
        • 记录最大值:一旦形成了大小为k的滑动窗口(即i >= k - 1),将双端队列头部的元素(当前窗口的最大值)添加到结果列表max_values中。
      3. 返回结果:遍历完成后,返回max_values列表。

      完整代码

      Java

      class Solution {
          public int[] maxSlidingWindow(int[] nums, int k) {
              Deque<Integer> dq = new LinkedList<>();  // 初始化双端队列
              ArrayList<Integer> maxValues = new ArrayList<>();  // 初始化结果列表
      
              for (int i = 0; i < nums.length; i++) {
                  // 移除不在窗口内的元素
                  while (!dq.isEmpty() && dq.peek() < i - k + 1) {
                      dq.poll();
                  }
      
                  // 移除所有小于当前元素的元素
                  while (!dq.isEmpty() && nums[dq.peekLast()] < nums[i]) {
                      dq.pollLast();
                  }
      
                  dq.offer(i);  // 将当前元素索引添加到队列尾部
      
                  // 当窗口大小达到k时,记录当前窗口的最大值
                  if (i >= k - 1) {
                      maxValues.add(nums[dq.peek()]);
                  }
              }
      
              // 将结果列表转换为数组并返回
              int[] result = new int[maxValues.size()];
              for (int i = 0; i < maxValues.size(); i++) {
                  result[i] = maxValues.get(i);
              }
              return result;
          }
      }

      Python

      class Solution:
          def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
              dq = deque()  # 初始化双端队列
              max_values = []  # 初始化结果列表
      
              for i in range(len(nums)):
                  # 移除不在窗口内的元素
                  while dq and dq[0] < i - k + 1:
                      dq.popleft()
                  
                  # 移除所有小于当前元素的元素
                  while dq and nums[dq[-1]] < nums[i]:
                      dq.pop()
                  
                  dq.append(i)  # 将当前元素索引添加到队列尾部
      
                  # 当窗口大小达到k时,记录当前窗口的最大值
                  if i >= k - 1:
                      max_values.append(nums[dq[0]])
              
              return max_values

      632. 最小区间

              你有 k 个 非递减排列 的整数列表。找到一个 最小 区间,使得 k 个列表中的每个列表至少有一个数包含在其中。

              我们定义如果 b-a < d-c 或者在 b-a == d-c 时 a < c,则区间 [a,b] 比 [c,d] 小。

       

      示例 1:

      输入:nums = [[4,10,15,24,26], [0,9,12,20], [5,18,22,30]]
      输出:[20,24]
      解释: 
      列表 1:[4, 10, 15, 24, 26],24 在区间 [20,24] 中。
      列表 2:[0, 9, 12, 20],20 在区间 [20,24] 中。
      列表 3:[5, 18, 22, 30],22 在区间 [20,24] 中。
      示例 2:

      输入:nums = [[1,2,3],[1,2,3],[1,2,3]]
      输出:[1,1]
       

      提示:

      nums.length == k
      1 <= k <= 3500
      1 <= nums[i].length <= 50
      -10^5 <= nums[i][j] <= 10^5
      nums[i] 按非递减顺序排列

       

      解题思路

              这个问题可以通过使用最小堆(优先队列)来有效解决。核心思想是维护一个包含来自每个列表的最小元素的堆,同时跟踪当前的最小区间。我们需要确保当前堆中包含来自每个列表的至少一个元素,以此来找到包含至少一个元素的最小区间。

      1. 初始化:创建一个最小堆(优先队列),用于存储每个列表中的元素及其来源列表的索引和元素在列表中的索引。同时,初始化一个变量max来跟踪堆中的最大元素。
      2. 填充堆:将每个列表的第一个元素加入堆中,并更新max为这些元素的最大值。
      3. 寻找最小区间:
        • 初始化最小区间的左右端点minRangeLeft和minRangeRight,初始设为无穷大和无穷小。
        • 当堆的大小等于列表的数量(即堆中包含来自每个列表的至少一个元素)时,循环进行以下操作:
          • 弹出堆顶元素(当前最小元素),记录其值和来源信息。
          • 更新当前最小区间:如果当前区间比已记录的最小区间小,更新minRangeLeft和minRangeRight。
          • 如果当前最小元素的来源列表中还有更多元素,将下一个元素加入堆中,并更新max。
      4. 返回结果:返回最小区间[minRangeLeft, minRangeRight]。

      完整代码

      Java

      class Solution {
          public int[] smallestRange(List<List<Integer>> nums) {
              // 最小堆,按元素的值排序
              PriorityQueue<int[]> pq = new PriorityQueue<>((a, b) -> a[0] - b[0]);
              int minRange = Integer.MAX_VALUE, start = -1, end = -1, max = Integer.MIN_VALUE;
              
              // 初始化堆,加入每个列表的第一个元素
              for (int i = 0; i < nums.size(); i++) {
                  int val = nums.get(i).get(0);
                  pq.offer(new int[]{val, i, 0});
                  max = Math.max(max, val);
              }
      
              while (pq.size() == nums.size()) {
                  int[] curr = pq.poll();
                  int currVal = curr[0], row = curr[1], col = curr[2];
                  // 更新最小区间
                  if (max - currVal < minRange || (max - currVal == minRange && currVal < start)) {
                      minRange = max - currVal;
                      start = currVal;
                      end = max;
                  }
                  // 如果当前元素的列表中还有更多元素,将下一个元素加入堆
                  if (col + 1 < nums.get(row).size()) {
                      currVal = nums.get(row).get(col + 1);
                      pq.offer(new int[]{currVal, row, col + 1});
                      max = Math.max(max, currVal);
                  }
              }
      
              return new int[]{start, end};
          }
      }

      Python

      class Solution:
          def smallestRange(self, nums: List[List[int]]) -> List[int]:
              # 初始化最小堆
              min_heap = []
              # 记录堆中所有元素的最大值
              max_val = float('-inf')
              # 遍历nums,将每个列表的第一个元素及其索引信息加入堆中
              for i, sublist in enumerate(nums):
                  heapq.heappush(min_heap, (sublist[0], i, 0))
                  max_val = max(max_val, sublist[0])
              
              # 初始化区间的起始和结束值
              start, end = float('-inf'), float('inf')
      
              while len(min_heap) == len(nums):
                  # 弹出当前最小元素
                  min_val, row, col = heapq.heappop(min_heap)
                  # 如果当前的[start, end]区间大于新的可能区间,则更新区间
                  if max_val - min_val < end - start:
                      start, end = min_val, max_val
                  # 如果弹出的元素所在的行还有更多元素,将下一个元素加入堆中
                  if col + 1 < len(nums[row]):
                      next_val = nums[row][col + 1]
                      heapq.heappush(min_heap, (next_val, row, col + 1))
                      # 更新堆中所有元素的最大值
                      max_val = max(max_val, next_val)
      
              return [start, end]
      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.csdn.net/qq_52213943/article/details/136496179,作者:昊昊该干饭了,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:算法题 102. 二叉树的层序遍历,104. 二叉树的最大深度,110. 平衡二叉树

      下一篇:C语言基础之——数组

      相关文章

      2025-05-19 09:04:38

      使用列表实现名片管理系统的增删改查。

      使用列表实现名片管理系统的增删改查。

      2025-05-19 09:04:38
      code , 列表 , 改查
      2025-05-16 09:15:24

      Redis Set集合

      Redis Set集合

      2025-05-16 09:15:24
      set , 个数 , 元素 , 示例 , 集合
      2025-05-16 09:15:24

      Redis Hash哈希

      Redis Hash哈希

      2025-05-16 09:15:24
      field , hash , Redis , value , 哈希
      2025-05-14 10:33:31

      【数据结构】详细介绍串的简单模式匹配——朴素模式匹配算法

      【数据结构】详细介绍串的简单模式匹配——朴素模式匹配算法

      2025-05-14 10:33:31
      下标 , 元素 , 匹配 , 子串 , 模式匹配 , 算法
      2025-05-14 10:33:31

      计算机小白的成长历程——数组(1)

      计算机小白的成长历程——数组(1)

      2025-05-14 10:33:31
      strlen , 个数 , 元素 , 内存 , 十六进制 , 地址 , 数组
      2025-05-14 10:33:25

      超级好用的C++实用库之sha256算法

      SHA-256,英文全称为Secure Hash Algorithm 256-bit,是一种广泛使用的密码散列函数,属于SHA-2家族。

      2025-05-14 10:33:25
      CHP , 参数 , 哈希 , 算法 , 输入
      2025-05-14 10:33:16

      30天拿下Rust之向量

      在Rust语言中,向量(Vector)是一种动态数组类型,可以存储相同类型的元素,并且可以在运行时改变大小。向量是Rust标准库中的一部分,位于std::vec模块中。

      2025-05-14 10:33:16
      Rust , 使用 , 元素 , 向量 , 方法 , 索引 , 迭代
      2025-05-14 10:33:16

      C++ 11新特性之tuple

      在C++编程语言的发展历程中,C++ 11标准引入了许多开创性的新特性,极大地提升了开发效率与代码质量。其中,tuple(元组)作为一种强大的容器类型,为处理多个不同类型的值提供了便捷的手段。

      2025-05-14 10:33:16
      std , 元素 , 函数 , 初始化 , 模板 , 类型
      2025-05-14 10:03:13

      数据结构-队列

      队列是仅限在一端进行插入,另一端进行删除的线性表。

      2025-05-14 10:03:13
      元素 , 入队 , 出队 , 链表 , 队列
      2025-05-14 10:03:05

      30天拿下Rust之HashMap

      HashMap,被称为哈希表或散列表,是一种可以存储键值对的数据结构。它使用哈希函数将键映射到存储位置,以便可以快速检索和更新元素。

      2025-05-14 10:03:05
      HashMap , 使用 , 哈希 , 引用 , 方法 , 遍历 , 键值
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5251666

      查看更多

      最新文章

      Redis Set集合

      2025-05-16 09:15:24

      【数据结构】详细介绍串的简单模式匹配——朴素模式匹配算法

      2025-05-14 10:33:31

      超级好用的C++实用库之sha256算法

      2025-05-14 10:33:25

      30天拿下Rust之向量

      2025-05-14 10:33:16

      C++ 11新特性之tuple

      2025-05-14 10:33:16

      数据结构-队列

      2025-05-14 10:03:13

      查看更多

      热门文章

      python学习(6)——列表元素的添加、删除、修改及排序

      2023-05-22 03:00:29

      Python 处理表格进行成绩排序

      2023-03-21 02:52:11

      Python打乱列表/数组原顺序,新列表/数组中元素随机分布

      2023-04-13 09:36:44

      Python列表实现斐波那契数列

      2023-02-27 10:10:19

      区间K大数

      2023-02-10 10:10:49

      Python----Python中的列表及其常用方法

      2023-04-24 11:24:54

      查看更多

      热门标签

      java Java python 编程开发 代码 开发语言 算法 线程 Python html 数组 C++ 元素 javascript c++
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      javaScript Array.Map的使用

      开始使用流

      Java基础(Arrays工具类)(asList()方法)(详细)

      C++算法前缀和的应用:分割数组的最大值的原理、源码及测试用例

      特殊数组Ⅰ。

      【C++二分查找】2601. 质数减法运算|1779

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号