刷题笔记:力扣第763题-划分字母区间
1.本题考查贪心算法有点类似于力扣第45题-跳跃游戏Ⅱ不同之处在于45题是尽可能少跳而本题是满足区间条件后多跳。可以设置一个哈希数组先遍历一遍字符串s记录其中每个字母出现的区间之后再遍历一遍当遍历的位置超出了前面字符的最远右边界后即可划分一次。2.基于以上思想写出的完整代码如下1. /** 2. * Note: The returned array must be malloced, assume caller calls free(). 3. */ 4. int* partitionLabels(char* s, int* returnSize) { 5. int len strlen(s); 6. // start记录字符串首字符用于首次字符判断 7. char start s[0]; 8. // hash[26][0]字母第一次出现下标hash[26][1]字母最后一次出现下标 9. int hash[26][2]; 10. // 初始化hash数组全部置0 11. for (int i 0; i 26; i){ 12. memset(hash[i], 0, sizeof(hash[i])); 13. } 14. 15. // 第一次遍历字符串记录每个字母首尾出现位置 16. for (int i 0; i len; i){ 17. // 处理第一个字符直接初始化其首尾下标为0 18. if (i 0){ 19. hash[s[i] - a][0] 0; 20. hash[s[i] - a][1] 0; 21. continue; 22. } 23. // 当前字母从未记录过起始位置且不是首字符记录首次出现下标 24. if (hash[s[i] - a][0] 0 s[i] ! start){ 25. hash[s[i] - a][0] i; 26. hash[s[i] - a][1] i; 27. } else { 28. // 字母重复出现更新末尾下标为当前i 29. hash[s[i] - a][1] i; 30. } 31. } 32. 33. // 当前片段最远右边界初始为第一个字符最后出现位置 34. int end hash[s[0] - a][1]; 35. int cnt 1; // 当前分割片段字符计数 36. int cur 0; // 结果数组填充下标 37. // 最多分割len段开辟长度为len的结果数组 38. int* res (int*)malloc(sizeof(int) * len); 39. 40. // 第二次遍历滑动窗口分割字符串 41. for (int i 1; i len; i){ 42. // 遍历下标超过当前片段最远边界说明可以分割 43. if (i end){ 44. res[cur] cnt; 45. // 开启新片段更新边界与计数 46. end hash[s[i] - a][1]; 47. cnt 1; 48. } else { 49. // 仍在当前片段内更新片段最大右边界 50. end fmax(end, hash[s[i] - a][1]); 51. cnt; 52. } 53. } 54. // 存入最后一段的长度 55. res[cur] cnt; 56. 57. // 返回数组有效长度 58. *returnSize cur; 59. return res; 60. }该算法时间复杂度为O(n)空间复杂度为O(1)。3.本题实际上只关心字符的右边界所以可以将哈希数组简化为一维且因为i的值一直在递增遍历的时候该字符的最大右边界不需要进行额外的判断直接更新对应哈希数组的右边界值即可。优化后的完整代码如下1. /** 2. * Note: The returned array must be malloced, assume caller calls free(). 3. */ 4. int* partitionLabels(char* s, int* returnSize) { 5. // 获取字符串总长度 6. int len strlen(s); 7. // hash数组存储每个小写字母最后一次出现的下标 8. int hash[26] {0}; 9. 10. // 第一次遍历记录每个字母最靠右的位置 11. for (int i 0; i len; i){ 12. hash[s[i] - a] i; 13. } 14. 15. // 分配结果数组最多分割len段 16. int* res (int*)malloc(sizeof(int) * len); 17. int cnt 1; // 当前片段字符个数初始第一个字符 18. int cur 0; // 结果数组写入下标 19. int end hash[s[0] - a]; // 当前片段能延伸到的最右边界 20. 21. // 从第二个字符开始遍历分割字符串 22. for (int i 1; i len; i){ 23. // 遍历位置超出当前片段最大边界代表可以分割 24. if (i end){ 25. res[cur] cnt; 26. // 开启新片段更新右边界、重置计数 27. end hash[s[i] - a]; 28. cnt 1; 29. } else { 30. // 仍在当前片段内更新片段最远右边界片段长度1 31. end fmax(end, hash[s[i] - a]); 32. cnt; 33. } 34. } 35. // 存入最后一段的长度 36. res[cur] cnt; 37. 38. // 设置返回数组有效元素个数 39. *returnSize cur; 40. return res; 41. }该算法时间复杂度为O(n)空间复杂度为O(1)

相关新闻

静态时序分析(STA)核心:典型与非典型时序路径约束详解

静态时序分析(STA)核心:典型与非典型时序路径约束详解

1. 从“路径”说起:为什么你的设计跑不快?做数字电路设计,无论是ASIC还是FPGA,工程师们最常挂在嘴边的一个词可能就是“时序”。我们总说“时序收敛了没?”、“时序违例了,得优化一下”。但时序到底是什么&…

2026/10/19 16:40:23 阅读更多 →
十分钟搞定OpenClaw异步回调集成:WorkBuddy实战指南

十分钟搞定OpenClaw异步回调集成:WorkBuddy实战指南

1. 项目概述:一个“小工具”如何终结我的集成噩梦 如果你也像我一样,在尝试将OpenClaw这个强大的开源AI工具集成到自己的自动化工作流中时,被各种API密钥、回调地址、Webhook配置和莫名其妙的错误码折磨得焦头烂额,那么我接下来要…

2026/10/17 8:43:00 阅读更多 →
Linux多网卡路由配置问题与解决方案

Linux多网卡路由配置问题与解决方案

1. 问题背景与现象描述 上周在部署一台新服务器时遇到了一个典型的网络配置问题:这台机器配备了四块物理网卡,分别连接了不同的网络环境。在完成基础系统安装后,发现机器无法正常访问外网,但内网通信完全正常。这种多网卡环境下的…

2026/10/19 7:11:25 阅读更多 →

最新新闻

Git仓库本地化:从镜像克隆到自建服务的完整迁移指南

Git仓库本地化:从镜像克隆到自建服务的完整迁移指南

在公共代码托管平台嫖了这么多年仓库,很多开发团队都会遇到这样一个不能再熟悉的场景:项目越来越重要,团队规模变大,合规要求收紧,或者你所在的内网环境根本连不到外网,这时候“git仓库本地化”就成了绕不开…

2026/10/19 16:40:18 阅读更多 →
Git仓库本地化全指南:从迁移方案到备份恢复的完整实践

Git仓库本地化全指南:从迁移方案到备份恢复的完整实践

最近团队在做一个不大不小的基建调整:把散落在外部托管平台上的代码仓库,全部收回到内网服务器,做一次彻底的仓库本地化。折腾了一周多,踩了不少坑,也沉淀出一套可以照抄的流程。这篇就围绕 git 仓库本地化&#xff0c…

2026/10/19 16:40:18 阅读更多 →
UDP socket通讯从原理到实战:避开丢包与缓冲区陷阱

UDP socket通讯从原理到实战:避开丢包与缓冲区陷阱

做网络通讯的同学应该都有过这种体验:项目整体设计里定好了UDP通讯,但到了socket层实现时,最不起眼的细节反而浪费最多时间。socket之UDP通讯这个主题看着基础,实践起来却能带出一串问题——无连接、数据报边界、MTU、缓冲区、端口…

2026/10/19 16:40:18 阅读更多 →
用代码自动生成电影预告片:从场景检测到音频卡点的工程实践

用代码自动生成电影预告片:从场景检测到音频卡点的工程实践

我最初接触“用代码生成电影预告片”这个想法,是在一次项目交付周期被压缩到几乎不合理的极限时。当你的手头堆着几十段零碎的素材,需要在几个小时内剪出一版节奏够快、情绪能立起来的预告片,传统剪辑软件里的逐帧精修操作,就会变…

2026/10/19 16:40:18 阅读更多 →
基于Java的全屋家具定制信息管理系统设计与开题答辩指南

基于Java的全屋家具定制信息管理系统设计与开题答辩指南

最近帮学生准备毕业设计的开题答辩,正好碰到一个很有代表性的题目:基于Java的全屋家具定制信息管理系统设计。这个题目听起来很常规,但真正能把开题报告讲清楚、扛住答辩老师连环追问的人并不多。很多时候问题不是代码写不出来,而…

2026/10/19 16:40:18 阅读更多 →
用元空AI Claw实现公众号每天自动生成10篇文章的完整教程

用元空AI Claw实现公众号每天自动生成10篇文章的完整教程

1. 先想清楚:这10篇到底是给谁看的“每天自动给你10篇公众号文章”,听起来像是只要把工具挂上,早上打开手机就有现成的稿子等着发。但实际上,我最早自己做这套自动化的时候,第一个动作不是去拉接口,而是先停…

2026/10/19 16:38:59 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →