刷题笔记:力扣第704、977、209题(数组相关)
力扣第704题-二分查找1.练手题简单的二分排序完整代码如下1. int search(int* nums, int numsSize, int target) { 2. // 左边界l初始为数组起点下标0右边界r初始为数组最后一个元素下标 3. int l 0, r numsSize - 1; 4. // 左边界右边界时区间内还有元素持续二分查找 5. while (l r){ 6. // 计算中间下标 7. int mid (l r) / 2; 8. // 中间值小于目标值目标在右半区间更新左边界 9. if (nums[mid] target){ 10. l mid 1; 11. } else if (nums[mid] target){ 12. // 中间值大于目标值目标在左半区间更新右边界 13. r mid - 1; 14. } else { 15. // 找到目标值返回对应下标 16. return mid; 17. } 18. } 19. 20. // 循环结束未找到目标返回-1 21. return -1; 22. }时间复杂度O(logn)空间复杂度O(1)标准写法。力扣第977题-有序数组的平方1.直接算出平方后暴力排序肯定是不可取的那样的算法时间复杂度为O(nlogn)题目要求时间复杂度为O(n)即遍历一遍数组便能得出答案。2.初步想法为寻找非正数与正数的分界点使用左右两个指针来进行比较和排序完整代码如下1. int* sortedSquares(int* nums, int numsSize, int* returnSize) { 2. // 分配和原数组长度相同的内存存放平方后的结果 3. int* res (int*)malloc(sizeof(int) * numsSize); 4. // cur 标记结果数组当前存放元素的位置 5. int cur 0; 6. // r 右指针寻找第一个非负数下标 7. int r 0; 8. 9. // 右指针向右移动找到第一个不小于0的数字 10. while (r numsSize nums[r] 0){ 11. r; 12. } 13. 14. // l 左指针指向最后一个负数的下标 15. int l r - 1; 16. 17. // 左右指针都未越界比较绝对值大小小的平方先放入结果 18. while (l 0 r numsSize){ 19. // 左边负数绝对值更小先存左边平方 20. if (-nums[l] nums[r]){ 21. res[cur] nums[l] * nums[l]; 22. l--; 23. } else { 24. // 右边数字更小或相等存右边平方 25. res[cur] nums[r] * nums[r]; 26. r; 27. } 28. } 29. 30. // 若左指针还有剩余负数依次放入结果 31. while (l 0){ 32. res[cur] nums[l] * nums[l]; 33. l--; 34. } 35. 36. // 若右指针还有剩余非负数依次放入结果 37. while (r numsSize){ 38. res[cur] nums[r] * nums[r]; 39. r; 40. } 41. 42. // 给外部参数赋值结果数组长度 43. *returnSize cur; 44. return res; 45. }该算法时间复杂度为O(nlogn)满足题目要求。3.答案提供了另外一种思路原数组的平方一定是从两端向中间依次递减所以可以不用排序将左右指针放置于数组两端比较平方后更大的那一个逆序放入结果数组。完整代码如下1. int* sortedSquares(int* nums, int numsSize, int* returnSize) { 2. // 开辟结果数组空间大小与原数组一致 3. int* res (int*)malloc(sizeof(int) * numsSize); 4. // cur 从结果数组末尾开始填充大数放后面 5. int cur numsSize - 1; 6. // l 左指针指向数组最左端负数区r 右指针指向数组最右端正数区 7. int l 0, r numsSize - 1; 8. 9. // 左右指针未相遇时循环 10. while (l r){ 11. // 左侧数字平方更大 12. if (nums[l] * nums[l] nums[r] * nums[r]){ 13. // 将大的平方值放入结果数组尾部游标前移左指针右移 14. res[cur--] nums[l] * nums[l]; 15. l; 16. } else { 17. // 右侧数字平方更大或相等存入尾部游标前移右指针左移 18. res[cur--] nums[r] * nums[r]; 19. r--; 20. } 21. } 22. 23. // 返回数组长度等于原数组长度 24. *returnSize numsSize; 25. return res; 26. }该算法时间复杂度为O(nlogn)满足题目要求。力扣第209题-长度最小的子数组1.这道题肯定是使用滑动窗口初步写出的代码如下1. int minSubArrayLen(int target, int* nums, int numsSize) { 2. int l 0, r 0; 3. int tmp 0; 4. int res 100001; 5. 6. while (r numsSize l r){ 7. int cnt r - l; 8. if (tmp target){ 9. tmp nums[r]; 10. } else { 11. res fmin(res, cnt); 12. tmp - nums[l]; 13. } 14. } 15. 16. return res 100001 ? 0 : res; 17. }2.初步写的代码连本地算例都没通过询问ai后得知滑动窗口的处理逻辑有些问题。正确的滑动窗口处理方式应该是右指针一直无条件向前左指针根据条件向前回退吐出元素。这种错误在力扣第3题犯过属于时间久了忘记该知识点了正好通过本题来回忆一下。3.基于以上思想写出的完整代码如下1. int minSubArrayLen(int target, int* nums, int numsSize) { 2. // 记录满足条件的最小子数组长度初始值设为大于数组最大可能长度的数 3. int res 100001; 4. // 滑动窗口内元素累加和 5. int tmp 0; 6. 7. // 滑动窗口l窗口左边界r窗口右边界右边界不断向右扩张 8. for (int l 0, r 0; r numsSize; r){ 9. // 将当前右边界数值加入窗口和 10. tmp nums[r]; 11. // 窗口和大于等于目标值时尝试收缩左边界寻找更短合法子数组 12. while (tmp target){ 13. // 计算当前窗口长度 14. int cnt r - l 1; 15. // 更新最小长度 16. res fmin(res, cnt); 17. // 左边界右移窗口缩小减去移出窗口的数值 18. tmp - nums[l]; 19. } 20. } 21. 22. // 如果res未更新说明无满足条件子数组返回0否则返回最小长度 23. return res 100001 ? 0 : res; 24. }时间复杂度为O(n)满足题目要求。

相关新闻

SEO关键词研究:从用户意图到实战优化

SEO关键词研究:从用户意图到实战优化

1. SEO关键词研究的底层逻辑与价值解析做网站优化这些年,我见过太多人把SEO简单理解为"堆砌关键词"。实际上,真正有效的关键词研究更像是在做用户心理测绘。当你在Google搜索框输入文字的那一刻,背后是带着明确意图的——可能是想解…

2026/8/18 10:48:00 阅读更多 →
超级浏览器需要日常维护吗?团队每周应检查什么

超级浏览器需要日常维护吗?团队每周应检查什么

超级浏览器通常集成环境隔离、多开管理、分组标签、团队权限和自动化接口。很多团队重视首次配置,却忽略内核更新、停用环境、成员权限和备份状态会持续变化。建立轻量的每周维护清单,可以减少环境混乱,也能让异常更早被发现。 为什么超级浏…

2026/8/19 16:27:18 阅读更多 →
单元测试实践指南:从JUnit到Mock技术

单元测试实践指南:从JUnit到Mock技术

1. 单元测试的本质与价值单元测试是软件开发过程中最基础的测试环节,它针对程序模块(软件设计的最小单位)进行正确性检验。不同于集成测试或系统测试,单元测试的粒度更细、执行更快、反馈更及时。我在十多年的开发实践中发现&…

2026/8/19 10:25:12 阅读更多 →

最新新闻

功率MOSFET工程应用实战:从选型、驱动到热设计的关键要点

功率MOSFET工程应用实战:从选型、驱动到热设计的关键要点

1. 从“开关”到“心脏”:功率MOSFET的工程视角聊到功率器件,很多刚入行的朋友第一反应可能就是“不就是个开关嘛”。我刚开始接触电源、电机驱动这些领域时,也是这么想的。但真正上手做项目,从选型、画板、调试到量产&#xff0c…

2026/8/19 19:44:13 阅读更多 →
IGBT选型实战指南:从参数解析到系统设计,避免常见误区

IGBT选型实战指南:从参数解析到系统设计,避免常见误区

1. 从“能用”到“好用”:IGBT选型的核心挑战在电力电子领域,IGBT(绝缘栅双极型晶体管)是当之无愧的“心脏”级功率器件。无论是工业变频器、新能源车的电驱系统,还是我们厨房里的电磁炉,其高效的能量转换都…

2026/8/19 19:44:13 阅读更多 →
Cockpit 核心概念精讲:Collections、Singletons 与 Trees 到底该怎么选?

Cockpit 核心概念精讲:Collections、Singletons 与 Trees 到底该怎么选?

Cockpit 核心概念精讲:Collections、Singletons 与 Trees 到底该怎么选? 【免费下载链接】Cockpit Cockpit Core - Content Platform 项目地址: https://gitcode.com/gh_mirrors/cockp/Cockpit Cockpit CMS 是一款开源的 headless 内容平台&#…

2026/8/19 19:44:13 阅读更多 →
安全最佳实践:用 token-core-android 开发钱包 App 的 7 条铁律

安全最佳实践:用 token-core-android 开发钱包 App 的 7 条铁律

安全最佳实践:用 token-core-android 开发钱包 App 的 7 条铁律 【免费下载链接】token-core-android a blockchain private key management library on android 项目地址: https://gitcode.com/gh_mirrors/to/token-core-android 如果你正在 Android 上开发…

2026/8/19 19:44:13 阅读更多 →
从零玩转Parabolic:跨平台视频下载工具的完整上手指南

从零玩转Parabolic:跨平台视频下载工具的完整上手指南

从零玩转Parabolic:跨平台视频下载工具的完整上手指南 【免费下载链接】Parabolic Download web video and audio 项目地址: https://gitcode.com/GitHub_Trending/pa/Parabolic Parabolic 是一款基于 yt-dlp 引擎的开源跨平台视频下载工具,原生支…

2026/8/19 19:44:13 阅读更多 →
安全使用指南:Qwen3.8-27B-Abliterated-MLX解除拒绝行为后的5个风险与合规建议

安全使用指南:Qwen3.8-27B-Abliterated-MLX解除拒绝行为后的5个风险与合规建议

安全使用指南:Qwen3.8-27B-Abliterated-MLX解除拒绝行为后的5个风险与合规建议 【免费下载链接】Qwen3.8-27B-Abliterated-MLX 项目地址: https://ai.gitcode.com/hf_mirrors/PocketAiHub/Qwen3.8-27B-Abliterated-MLX Qwen3.8-27B-Abliterated-MLX 是一款通…

2026/8/19 19:43:13 阅读更多 →

日新闻

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/19 0:00:30 阅读更多 →
AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

1. 项目概述:当AI开始“猜”数学定理 最近在AI研究圈里,一个名为“Moonshine”的项目引起了不小的讨论。这名字本身就挺有意思,直译是“月光”,但在数学史上,它特指一个神秘而美丽的联系——魔群月光猜想,连…

2026/8/19 0:00:30 阅读更多 →
WarcraftHelper 魔兽争霸3优化实战指南

WarcraftHelper 魔兽争霸3优化实战指南

WarcraftHelper 魔兽争霸3优化实战指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 一台刚配的新电脑,跑《魔兽争霸3》却卡成 PPT——这…

2026/8/19 0:02:31 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/19 11:55:18 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/19 9:46:27 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/19 11:55:16 阅读更多 →

月新闻

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

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

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

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

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

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

2026/8/19 7:42:22 阅读更多 →
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/19 11:55:13 阅读更多 →