当前位置: 首页 > news >正文

Leetcode:学习记录(二)

按照https://leetcode.cn/circle/discuss/RvFUtj/顺序刷题

零、经验记录

1. 学会画图分析

2. 学会找终止条件

3. 做一道就高质量完成

一、二分算法

0. 总结:大于某个数的第一个数的位置有固定模板,其中要讨论最后一个数小于等于目标数的情况

1. 二分查找:在升序数组中查找某数,如果存在则返回下标,不存在则返回-1

a. 自己的想法:left、mid、right三个指针迭代,注意终止条件,一是mid对应的元素为该数,二是到了只剩两个元素时,那么此时mid=left,如果right对应元素为该数,则返回下表right,如果不是,则代表数组中没有该数,返回-1

b. 存在的问题:判断条件复杂,原因是边界不好,每次判断完大小后,实际上mid对应的元素就可以被排除了。如果nums[mid] > target: right = mid-1。如果nums[mid]<target:left=mid+1。

c. 一点点的疏忽会带来极大的麻烦,要求逻辑足够严谨,充分利用已有信息。

2. 寻找比目标字母大的最小字母:找到一个非递减字符数组中比目标字母大的最小字母

a. 自己的想法:三指针迭代,迭代方式为: if letters[mid] <= target: left= mid+1; if letters[mid] > target: right = mid

b. 存在的问题:没考虑到字母之间可以直接比较(上面是改正后的),没有搞清终止条件。如下图,首先排除target不在该字符数组的两种情况,然后递推即可。

3. 正整数和负整数的最大计数:统计非递减数组的正整数数量和负整数数量中的最大值

a. 自己的想法:需要计算pos和neg的数量,首先如果第一个数大于0或者最后一个数小于0,那么该数组全正或全负,返回数组长度即可。然后分别找到大于0的第一个数的位置和小于0的最后一个数的位置。这里需要注意避免陷入死循环,需要考虑遍历尽头。

b.存在的问题:小于0的最后一个数容易陷入死循环,可以转换为大于等于-1的第一个数,然后这个数的前一个数就必然是最后一个负整数。

相关文章:

  • tcp协议连接,和传输数据
  • 【论文复现】ESRGAN
  • 使用 Certbot 自动获取和更新 Let‘s Encrypt SSL 证书
  • Matlab写入点云数据到Rosbag
  • 基于YOLOv8的人脸识别系统
  • JVM类文件结构深度解析:跨平台基石与字节码探秘
  • Idea新建Package嵌套折叠现象以及如何处理
  • SPO(Self-Supervised Prompt Optimization)自我监督Prompt提示优化的全景指南
  • 2023年全国职业院校技能大赛GZ073网络系统管理赛项赛题第10套模块A:网络构建
  • 解码 NLP:从萌芽到蓬勃的技术蜕变之旅
  • VMware新建虚拟机
  • 智能体(AI Agent、Deepseek、硅基流动)落地实践Demo——借助大模型生成报表,推动AI赋能企业决策
  • Jest单元测试
  • Word接入DeepSeek(API的作用)
  • TypeScript学习:初学
  • 【学习笔记】Cadence电子设计全流程(二)原理图库的创建与设计(上)
  • Linux:进程间通信(一.初识进程间通信、匿名管道与命名管道、共享内存)
  • DiskGenius工具扩容Mac OS X Apple APFS分区
  • 动态规划,复习
  • 如何开发一个大模型应用?
  • 浙江省机电集团党委书记、董事长廉俊接受审查调查
  • 印度最新发声:对所有敌对行动均予以反击和回应,不会升级冲突
  • 外交部发言人就印巴局势升级答记者问
  • 中国海外发展:今年前4个月销售665.8亿元,花费305亿元拿地
  • 巴总理召开国家指挥当局紧急会议
  • 《尤物公园》连演8场:观众上台,每一场演出都独一无二