刷题笔记:力扣第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/10/12 7:34:58 阅读更多 →
超级浏览器需要日常维护吗?团队每周应检查什么

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

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

2026/10/12 7:35:08 阅读更多 →
单元测试实践指南:从JUnit到Mock技术

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

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

2026/10/12 3:06:57 阅读更多 →

最新新闻

WASI 文件系统路径解析与沙箱机制深度剖析:从 openat 手动算法到 openat2 内核原语

WASI 文件系统路径解析与沙箱机制深度剖析:从 openat 手动算法到 openat2 内核原语

【免费下载链接】WASI WebAssembly System Interface 项目地址: https://gitcode.com/gh_mirrors/wa/WASI 点击查看 免费下载 导读 WASI(WebAssembly System Interface)的文件系统接口采用"能力导向(capability-oriented&a…

2026/10/12 7:34:22 阅读更多 →
基于Django+Vue.js的租房推荐系统设计与实现

基于Django+Vue.js的租房推荐系统设计与实现

1. 项目定位与整体方案拆解1.1 毕业设计选题怎么看每年毕业季都有大量同学选择"XX推荐系统"这类题目,租房推荐系统在其中算是非常经典也比较好落地的一个方向。原因很简单:推荐系统类题目天然自带算法亮点,又不缺业务场景&#xff…

2026/10/12 7:34:22 阅读更多 →
AnyPS5项目解析:技术定位与合规开发边界

AnyPS5项目解析:技术定位与合规开发边界

我无法基于当前输入生成符合要求的博文。原因如下:项目标题“AnyPS5”缺乏明确指向性,未说明是硬件改装、模拟器方案、跨平台兼容层、开发工具链,还是其他技术方向;项目正文为空,无任何功能描述、技术目标、实现方式或…

2026/10/12 7:34:22 阅读更多 →
4个工具型网站帮你快速读懂陌生项目源码

4个工具型网站帮你快速读懂陌生项目源码

1. 为什么读懂陌生项目源码这么难刚接手一个陌生的代码仓库,打开首页看到几十个文件夹、上百个源文件,README 写得云里雾里,这种感觉我相信每个开发者都经历过。尤其是当你需要在一周内摸清一个开源项目的架构,然后基于它做二次开…

2026/10/12 7:34:22 阅读更多 →
智能桌面宠物开发实战:从悬浮窗透明到AI对话的完整工程路径

智能桌面宠物开发实战:从悬浮窗透明到AI对话的完整工程路径

简介:面向电子爱好者、嵌入式开发者和创客玩家的智能桌面宠物完整资料包,整合了代码、固件、硬件图纸与视频教程,解决从零开始制作桌宠时遇到的烧录困难、环境配置和语音交互等问题。资源共82个文件,压缩包大小48.21MB&#xff0c…

2026/10/12 7:34:22 阅读更多 →
删数问题与贪心算法:从错误直觉到单调栈最优解

删数问题与贪心算法:从错误直觉到单调栈最优解

上个月帮几位朋友看算法实验作业,他们在头歌平台上刷贪心算法关卡,卡得最久的不是那些需要长篇大论设计的题目,而是一道看起来非常简单的"删数问题"。代码量不到二十行,解题思路也说得头头是道,可提交上去就…

2026/10/12 7:33:21 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 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/11 10:45:37 阅读更多 →
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/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练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/11 14:36:54 阅读更多 →