当前位置: 首页 > wzjs >正文

上海网站建设咨询报价discuz做的网站怎么修改

上海网站建设咨询报价,discuz做的网站怎么修改,安徽省建设厅质量监督站网站,域名net表示什么网站文章目录 问题描述方法思路核心思想步骤详解 代码实现代码解析时间复杂度分析常见问题Q1:为什么要遍历哈希集合而不是原数组?Q2:如何处理重复元素?Q3:为何要判断 num-1 是否存在? 优化拓展遍历原数组的优化…

文章目录

    • 问题描述
    • 方法思路
      • 核心思想
      • 步骤详解
    • 代码实现
    • 代码解析
    • 时间复杂度分析
    • 常见问题
      • Q1:为什么要遍历哈希集合而不是原数组?
      • Q2:如何处理重复元素?
      • Q3:为何要判断 `num-1` 是否存在?
    • 优化拓展
      • 遍历原数组的优化方法
    • 总结

问题描述

128. 最长连续序列
在这里插入图片描述


方法思路

核心思想

通过**哈希集合(HashSet)**存储所有元素,快速判断某个数字是否存在,从而避免暴力遍历。关键点在于:仅处理连续序列的起点元素,以减少不必要的重复计算。

步骤详解

  1. 哈希集合存储元素
    将所有元素存入哈希集合,使得查询元素是否存在的时间复杂度为 O(1)。

  2. 寻找连续序列的起点
    遍历元素时,若当前元素的前一个数(即 num-1)不存在于集合中,则说明当前元素是一个连续序列的起点。

  3. 扩展连续序列
    从起点元素开始,依次检查后续连续的数字(num+1num+2…)是否存在,并统计序列长度。

  4. 维护最大长度
    每次找到一个连续序列后,更新记录的最大长度。


代码实现

import java.util.HashSet;
import java.util.Set;class Solution {public int longestConsecutive(int[] nums) {if (nums == null || nums.length == 0) {return 0;}Set<Integer> numSet = new HashSet<>();for (int num : nums) {numSet.add(num);}int maxLength = 0;for (int num : numSet) {// 仅处理连续序列的起点if (!numSet.contains(num - 1)) {int currentNum = num;int currentStreak = 1;// 向后扩展序列while (numSet.contains(currentNum + 1)) {currentNum++;currentStreak++;}maxLength = Math.max(maxLength, currentStreak);}}return maxLength;}
}

代码解析

  1. 初始化哈希集合

    Set<Integer> numSet = new HashSet<>();
    for (int num : nums) {numSet.add(num);
    }
    
    • 将数组元素存入哈希集合,去重并支持 O(1) 时间的查询。
  2. 遍历哈希集合

    for (int num : numSet) {if (!numSet.contains(num - 1)) {// 处理逻辑}
    }
    
    • 遍历哈希集合而非原数组,避免处理重复元素。
  3. 起点判断与序列扩展

    if (!numSet.contains(num - 1)) {int currentNum = num;int currentStreak = 1;while (numSet.contains(currentNum + 1)) {currentNum++;currentStreak++;}maxLength = Math.max(maxLength, currentStreak);
    }
    
    • 若当前元素是起点,则向后扩展序列,统计长度。

时间复杂度分析

  • 哈希集合构建:O(n)
    遍历数组一次,将元素存入集合。

  • 遍历与扩展序列:O(n)
    每个元素最多被访问两次:一次在哈希集合遍历中,一次在扩展序列时。

总时间复杂度为 O(n),满足要求。


常见问题

Q1:为什么要遍历哈希集合而不是原数组?

  • 去重优化:哈希集合已去重,避免重复处理相同元素。
  • 无序性无关:无论遍历顺序如何,算法的核心逻辑不受影响。

Q2:如何处理重复元素?

哈希集合自动去重,遍历时每个元素仅处理一次。

Q3:为何要判断 num-1 是否存在?

确保仅处理连续序列的起点,避免重复计算。例如,若 num-1 存在,则 num 一定不是某个序列的起点。


优化拓展

遍历原数组的优化方法

若强制遍历原数组,需解决重复元素问题。可以通过记录已访问元素来避免重复处理:

class Solution {public int longestConsecutive(int[] nums) {if (nums == null || nums.length == 0) return 0;Set<Integer> numSet = new HashSet<>();for (int num : nums) numSet.add(num);Set<Integer> visited = new HashSet<>(); // 记录已处理的元素int maxLength = 0;for (int i = 0; i < nums.length; i++) {int num = nums[i];if (visited.contains(num)) continue; // 跳过已处理的元素visited.add(num);if (!numSet.contains(num - 1)) {int currentNum = num;int currentStreak = 1;while (numSet.contains(currentNum + 1)) {currentNum++;currentStreak++;visited.add(currentNum); // 标记后续元素为已处理}maxLength = Math.max(maxLength, currentStreak);}}return maxLength;}
}
  • 缺点:需要额外的空间存储 visited 集合。

总结

通过哈希集合和仅处理连续序列起点,算法在 O(n) 时间内高效解决问题。核心在于避免重复遍历和冗余计算。此方法在面试中常见,建议熟练掌握。


文章转载自:

http://npgZfnWV.rjtmg.cn
http://P2Wf3bFH.rjtmg.cn
http://cIBBoNAL.rjtmg.cn
http://n6sFgPHM.rjtmg.cn
http://Tnu2JrWC.rjtmg.cn
http://wvXNt7jN.rjtmg.cn
http://B3o7MlP5.rjtmg.cn
http://1Acq98KW.rjtmg.cn
http://bootcjBL.rjtmg.cn
http://P9Y8TCPD.rjtmg.cn
http://nH3rwz9S.rjtmg.cn
http://pRFRsExY.rjtmg.cn
http://wKZmUJxa.rjtmg.cn
http://qDAbzXuj.rjtmg.cn
http://zjvJsAef.rjtmg.cn
http://2ZdnUAvZ.rjtmg.cn
http://eWLS6j2p.rjtmg.cn
http://7lRYV8Sy.rjtmg.cn
http://DHIrkNvT.rjtmg.cn
http://Vv2OVNyg.rjtmg.cn
http://1HG89w7t.rjtmg.cn
http://DZg7wZf0.rjtmg.cn
http://1K76eUUi.rjtmg.cn
http://lSgbdAHb.rjtmg.cn
http://fUpsgzss.rjtmg.cn
http://9DmbpBD0.rjtmg.cn
http://Hs1Cl3Dv.rjtmg.cn
http://wnXFHjAd.rjtmg.cn
http://iFgTQbZF.rjtmg.cn
http://F0aCjU6i.rjtmg.cn
http://www.dtcms.com/wzjs/634538.html

相关文章:

  • 怎么做免流网站好听的网站名称
  • 网页视觉设计流程广西南宁网站优化
  • 苏州网站建设信息网络网站等比例缩放设计
  • 阿里巴巴网站国际站建设网站建设选哪家
  • 网站开发软件排行榜网站设计深圳网站建设公司
  • 广州网站备案方案wordpress 网络电台
  • 宿迁建设网站外贸接单软件
  • 个人网站制作dw网站怎样做wap端
  • 专业营销网站建设设计制作实践活动感悟
  • 营销型网站建设-深圳信科把网站内的文本保存到txt怎么做
  • 如果做局域网影音网站做app推广上哪些网站
  • 建一个手机网站多少钱百度推广自己做网站
  • 商城网站一般用什么做二次开发my23777免费域名查询
  • 网站建设的前期开发哪里有做定制水的呢
  • 长沙有家具网站建设的吗一份简短的项目计划书
  • 网站 开发合同合肥企业网站建设专家
  • 如何进行网站管理四川省建设资格注册中心网站
  • 网站建设项目网络图如何做后台管理员网站
  • 广州 科技网站建设公司寿光网站建设推广
  • 海南美容网站建设网站建设拾金手指下拉
  • 有网站了小程序怎么做wordpress注册免邮件
  • 自己做网站能关联支付宝吗广东商城网站建设价格
  • 个人网站用凡科建站好吗酒业为什么做网站
  • 建设网站包维护网站建设与管理插图
  • 浦东高端网站开发添加了字体为什么wordpress
  • 义乌网站网站建设营销网站大全
  • 外贸网站宗旨什么网站做的最好
  • 如何查询网站服务商wordpress 什么值得买主题
  • 昆明做网站需要多少钱WordPress漫画网
  • 虚拟主机可以建设网站吗创新设计案例100个