刷题笔记:力扣第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/8/7 8:51:58 阅读更多 →
十分钟搞定OpenClaw异步回调集成:WorkBuddy实战指南

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

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

2026/8/7 8:51:58 阅读更多 →
Linux多网卡路由配置问题与解决方案

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

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

2026/8/7 8:51:58 阅读更多 →

最新新闻

FPGA入门指南:从核心原理到LED流水灯实战开发

FPGA入门指南:从核心原理到LED流水灯实战开发

如果你是一名电子工程师、嵌入式开发者,或者正在研究高性能计算、人工智能加速,那么“FPGA”这个词你一定不陌生。它经常和“高性能”、“低延迟”、“可编程”这些词一起出现,听起来很强大,但又似乎带着一层神秘的面纱。很多人对…

2026/8/7 9:38:23 阅读更多 →
Zookeeper集群部署与分布式锁实现实战指南

Zookeeper集群部署与分布式锁实现实战指南

1. Zookeeper集群与分布式锁的核心价值 在分布式系统中,数据一致性和资源协调是两大核心挑战。Zookeeper作为一个分布式协调服务,通过其独特的ZAB协议和树形数据结构,为分布式应用提供了可靠的协调基础。而分布式锁作为Zookeeper最典型的应用…

2026/8/7 9:38:23 阅读更多 →
德州摩托车D本增驾全流程详解:从报名到拿证避坑指南

德州摩托车D本增驾全流程详解:从报名到拿证避坑指南

1. 增驾D本:为什么是德州,为什么是四大队? 去年夏天,我动了增驾摩托车D本的念头。原因很简单,一是身边玩摩托的朋友越来越多,周末跑山、短途摩旅的诱惑实在太大;二是考虑到实用性,家…

2026/8/7 9:38:23 阅读更多 →
Unity动画系统演进:从Mecanim到Animation Rigging与Playables

Unity动画系统演进:从Mecanim到Animation Rigging与Playables

1. 项目概述:从Mecanim到未来,Unity动画系统的演进之路 如果你在Unity里做过角色动画,那你一定和Animator窗口、状态机、Blend Tree这些东西打过交道。这套被官方称为“Mecanim”的动画系统,从Unity 4时代引入至今,已经…

2026/8/7 9:38:23 阅读更多 →
AI Skills开发实战:从概念到落地的全链路拆解与避坑指南

AI Skills开发实战:从概念到落地的全链路拆解与避坑指南

1. 从“上新”到“落地”:一次产品迭代背后的深度拆解 又到了月初,产品团队的朋友发来一条消息:“我们这波上新了,魔方洞察、智能选址、打车服务三大Skills,还有两轮车的熄屏导航也升级了,帮忙看看&#xf…

2026/8/7 9:38:23 阅读更多 →
工业管道封堵头核心技术解析与应用指南

工业管道封堵头核心技术解析与应用指南

1. 因斯特封堵头产品概述 在工业管道系统中,封堵头作为关键的安全密封部件,其性能直接影响着整个系统的可靠性和使用寿命。因斯特封堵头凭借其独特的设计理念和卓越的制造工艺,在同类产品中展现出显著的质量优势。这款产品采用高强度合金材料…

2026/8/7 9:37:23 阅读更多 →

日新闻

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 想要将Android手机屏幕完美投射到电脑上,享受大屏操作的自…

2026/8/7 0:00:19 阅读更多 →
如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南 【免费下载链接】tom-select Tom Select is a lightweight (~16kb gzipped) hybrid of a textbox and select box. Forked from selectize.js to provide a framework agnostic autocomplete widget wi…

2026/8/7 0:00:19 阅读更多 →
5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件 【免费下载链接】nsz NSZ - Homebrew compatible NSP/XCI compressor/decompressor 项目地址: https://gitcode.com/gh_mirrors/ns/nsz 你是否在为Nintendo Switch游戏文件占用大量存储…

2026/8/7 0:00:19 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/6 22:02:27 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/5 23:28:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/6 22:02:28 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/5 23:46:51 阅读更多 →