有序顺序表去重算法:双指针实现与优化

1. 题目解析与需求拆解

这道题目要求我们实现一个有序顺序表的重复元素删除操作。首先需要明确几个关键概念:

  • 顺序表:采用顺序存储结构的线性表,元素在内存中连续存放
  • 有序:表中元素已按某种规则(如升序或降序)排列
  • 删除重复元素:保留每个值第一次出现的位置,删除后续出现的相同值

需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。

2. 算法设计思路

对于有序顺序表,重复元素必定相邻排列。这个特性可以大幅简化算法设计:

2.1 双指针法

  1. 初始化两个指针:i=0(慢指针),j=1(快指针)
  2. 遍历顺序表:
    • 当L.data[j] ≠ L.data[i]时,将L.data[j]复制到i+1位置
    • 否则j继续向后移动
  3. 最后修改表长为i+1

2.2 时间复杂度分析

  • 最好情况:O(1)(无重复元素)
  • 最坏情况:O(n)(全部为重复元素)
  • 平均情况:O(n)

3. 具体实现代码(C语言)

c复制void DeleteDuplicate(SqList *L) {
    if (L->length == 0) return;  // 空表直接返回
    
    int i = 0;  // 慢指针
    for (int j = 1; j < L->length; j++) {  // 快指针
        if (L->data[j] != L->data[i]) {
            L->data[++i] = L->data[j];
        }
    }
    L->length = i + 1;  // 更新表长
}

4. 边界条件处理

需要特别注意以下几种特殊情况:

  1. 空表处理:直接返回
  2. 单元素表:无需处理
  3. 全相同元素:保留第一个
  4. 无重复元素:保持原样

5. 算法优化建议

  1. 空间优化:原地算法,空间复杂度O(1)
  2. 提前终止:当j遍历完所有元素后即可终止
  3. 稳定性:保持非重复元素的原始相对顺序

6. 测试用例设计

建议测试以下场景:

c复制// 测试用例1:普通情况
{1,2,2,3,3,3,4,5,5} → {1,2,3,4,5}

// 测试用例2:全相同元素
{7,7,7} → {7}

// 测试用例3:无重复元素
{1,3,5} → {1,3,5}

// 测试用例4:空表
{} → {}

7. 复杂度对比

与其他方法对比:

  • 暴力法:O(n²)(每个元素与后面所有元素比较)
  • 哈希表法:O(n)但需要额外空间
  • 排序+去重:破坏原始顺序

8. 实际应用场景

这种算法常用于:

  1. 数据库查询结果去重
  2. 日志数据清洗
  3. 统计分析的预处理
  4. 数据仓库ETL过程

9. 扩展思考

如果题目改为无序顺序表:

  1. 可以先排序再使用本算法(O(nlogn))
  2. 使用哈希表记录已出现元素(O(n)但需要额外空间)

提示:在面试中,面试官可能会追问无序情况的处理,建议提前准备相关解法。

内容推荐

HTML核心标签与现代化开发实践指南
HTML5 · 语义化标签 · Web Components
HTML作为构建网页的基础标记语言,通过标签系统定义文档结构与内容呈现。其核心原理在于使用语义化标签(如HTML5新增的`
已经到底了哦
精选内容
热门内容
最新内容
网络安全工程师职业发展与2026年趋势预测
网络安全作为数字化时代的核心防线,其技术原理基于对系统漏洞和攻击行为的深度理解。随着零信任架构和AI驱动的安全运维(AISecOps)成为行业标准,安全工程师需要掌握从网络协议分析到机器学习异常检测的多维技能。在云原生和物联网场景爆发的背景下,这些技术不仅能够有效防御SQL注入、XSS等传统威胁,更能应对新型的供应链攻击和APT攻击。对于从业者而言,构建T型知识结构——即在Web安全等细分领域深入,同时广泛覆盖网络基础与编程能力,将成为职业发展的关键。从薪资结构来看,持有OSCP、CISSP等认证的安全专家在金融和互联网行业可获得显著溢价,而实战能力远比证书数量更能体现工程师价值。
制造业数字化转型困境与精益工厂实施路径
数字化转型是制造业提升效率与竞争力的关键路径,其核心在于将精益思想与数字技术深度融合。通过物联网(IoT)设备实时采集设备状态、物料流动等数据,构建数字化价值流图(VSM),可显著优化生产流程。技术实现上需注重边缘计算与云计算的合理搭配,确保关键场景的实时响应。典型应用包括预测性维护、智能排产和视觉检测等,某汽车零部件企业通过数字化改造实现OEE从56%提升至82%。实施过程中需遵循精益筑基、数字赋能、持续改善三阶段路径,同时克服组织惯性,培养数字化精益师队伍。
HTML5开发指南:从基础到实战应用
HTML作为构建网页内容的核心标记语言,通过标签系统定义文档结构和内容呈现方式。其工作原理是通过浏览器解析HTML标签树,生成DOM结构实现页面渲染。作为前端开发三大基石之一,HTML5新增的语义化标签和多媒体支持显著提升了开发效率和用户体验。在SEO优化方面,合理的HTML结构配合meta标签能有效提升搜索引擎收录质量。现代Web开发中,HTML5的本地存储方案和表单验证体系为构建复杂应用提供了基础支持。结合响应式设计和性能优化实践,开发者可以创建符合Web标准的跨平台页面。
AI教育革命:多模态交互与认知图谱技术解析
人工智能技术正在深刻变革教育领域,其中认知图谱和多模态交互成为关键技术突破点。认知图谱通过动态追踪学习者的概念掌握度、思维模式和认知负荷,构建个性化的知识网络。多模态交互系统则整合了手写识别、语音理解和AR技术,实现自然高效的人机互动。这些技术的工程实践价值体现在自适应学习路径规划和实时概念可视化等场景中,如NeuroTutor等应用已证明能提升32%的学习效率。当前最前沿的神经符号集成架构(Neural-Symbolic Integration)进一步增强了AI系统的诊断能力,使其不仅能解答问题,更能精准识别思维盲区。教育科技领域正围绕这些核心技术,打造新一代的智能学习生态系统。
Floyd算法:动态规划解决多源最短路径问题
最短路径算法是图论中的基础算法,用于解决网络节点间最优路径计算问题。Floyd-Warshall算法采用动态规划思想,通过三重循环逐步优化路径矩阵,能够处理包含负权边的图结构(需排除负权环)。其O(n³)时间复杂度使其适合中小规模图计算,在交通网络规划、路由优化等场景展现独特优势。与Dijkstra等单源算法相比,Floyd算法的多源特性使其能一次性获得所有顶点对的最短路径,配合路径重建技巧可广泛应用于物流调度、游戏AI寻路等领域。算法实现中需特别注意动态规划的无后效性保证,以及负权环检测等边界情况处理。
AI安全:对抗攻击防御原理与轻量级方案实践
对抗攻击是AI安全领域的核心挑战,通过精心设计的微小扰动即可欺骗深度学习模型。其技术原理主要利用模型梯度信息构造对抗样本,常见攻击方法包括FGSM、PGD等。这类攻击对医疗影像、自动驾驶等关键领域构成严重威胁,MITRE报告显示商业系统攻击成功率高达76%。防御技术通过输入预处理、特征监测等层级的防护,在保持模型性能的同时提升鲁棒性。轻量级防御方案采用量化压缩、动态推理等技术,显著降低计算开销,适合教育及工业场景部署。随着AI应用普及,对抗防御已成为模型可靠性的重要保障,相关技术在金融风控等场景已实现攻击成功率降至3%以下的防护效果。
如何撰写高质量技术博客:内容策划与写作指南
技术博客写作是开发者分享知识与经验的重要方式,其核心在于内容策划与结构化表达。从技术概念解析到实践应用,一篇优秀的博客需要遵循清晰的逻辑框架:首先明确主题概念,然后深入原理分析,接着阐述技术价值,最后结合实际应用场景。在SEO优化方面,合理融入热词如'人工智能'和'云计算'能有效提升搜索可见性。对于开发者而言,掌握技术写作规范不仅能提升个人影响力,还能促进技术社区的交流与发展。
LangGraph Router结构:AI工作流动态路由核心技术解析
工作流编排是现代AI系统实现复杂业务逻辑的核心技术,其本质是通过有向图结构将离散的处理节点组织成可执行的业务流程。LangGraph作为LangChain生态中的工作流框架,采用Router结构实现动态路由分发,这种设计通过解耦节点逻辑与流转控制,显著提升了系统的模块化程度和扩展性。在技术实现层面,Router支持条件分支、机器学习预测和并行执行等多种路由策略,配合TypedDict类型的状态管理,能够高效处理对话系统、电商推荐等多步骤决策场景。特别是在需要处理循环执行、条件分支的AI应用(如智能客服、业务流程自动化)中,Router结构的可视化调试和状态追踪能力,为开发者提供了强大的问题排查工具。通过预编译路由、懒加载等优化手段,可进一步提升复杂工作流的执行效率。
前端实验室架构设计与工程化实践指南
前端开发已从简单页面制作演进为复杂应用工程,涉及响应式体系、状态管理、性能优化等核心技术。技术沙盒环境通过安全隔离验证新方案,效能工坊沉淀可复用工程化方案,创新孵化器孕育交互原型。本文以React+TypeScript技术栈为例,探讨微前端沙箱、可视化搭建等实验场景实现,结合Web Vitals指标建立效能度量体系。通过Monorepo管理、自动化文档生成等工程化实践,构建可持续的前端实验室架构,为探索WASM、WebGPU等前沿领域提供基础环境。
SQL GROUP BY 分组操作详解与实战技巧
GROUP BY是SQL中实现数据分组的核心操作,通过指定列将数据集划分为多个子集,配合聚合函数实现统计计算。其底层原理是数据库引擎先筛选数据,再按指定列分组,最后应用聚合运算。这一技术在数据分析领域具有重要价值,能够高效完成部门统计、销售分析等常见业务场景。在实际工程中,GROUP BY常与COUNT、SUM、AVG等聚合函数结合使用,并通过HAVING子句实现分组后过滤。优化GROUP BY性能需考虑索引策略和查询重写,而ROLLUP、CUBE等高级功能则支持多维数据分析。掌握这些技巧可以显著提升SQL查询效率和数据洞察能力。
已经到底了哦