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

yub‘s Algorithmic Adventures_Day7

环形链表

link:https://leetcode.cn/problems/linked-list-cycle-ii/description/

思路分析

我只能说双指针yyds【刻板hh】
我们分两种情况来分析

image-20241008235621325
起码在第二圈才会相遇 fast比slow多走环的整数倍

fast 走的步数是 slow 步数的 2 倍,即 f=2s;
fast 比 slow 多走了 n 个环的长度,即 f=s+nb;( 解析: 双指针都走过 a 步,然后在环内绕圈直到重合,重合时 fast 比 slow 多走 环的长度整数倍 )
将以上两式相减得到 f=2nb,s=nb,即 fast 和 slow 指针分别走了 2n,n 个环的周长

我们通过画图分析可得 当fast走到头节点位置时 再和slow一起前进时两者会在链表环入口节点处相遇 那么此时我们再将fast至于head位置即可.
有环
fast指针始终比slow指针多走一步 在有环的情况下必定会相遇 【每轮循环fast都靠近slow一步】
第一种结果:
如果链表存在环,则双指针一定会相遇。因为每走 1 轮,fast 与 slow 的间距 +1,fast 一定会追上 slow

第二种结果: 当fast == slow时, 两指针在环中第一次相遇

无环
fast 指针走过链表末端,说明链表无环,此时直接返回 null

ublic class Solution {public ListNode detectCycle(ListNode head) {ListNode fast = head;ListNode slow = head;while(true) {//判断是否为空/单节点if(fast == null || fast.next == null) return null;fast = fast.next.next;slow = slow.next;if(slow == fast) break;}//指针第二次相遇 重新使得fast指向头节点fast = head;while(slow != fast) {slow = slow.next;fast = fast.next;}return fast;}
}
Tips

链表类题目一般都是用双指针解决.【比如寻找距离尾部第N哥节点 寻找环入口 寻找公共尾部入口等】

有效的字母异位词

link:https://leetcode.cn/problems/valid-anagram/description/

思路分析

最开始分析的时候暴力找规则看的脑袋大 明明可以使用数组+记录解决.【数组其实就是一个简单的哈希表】

因为字符a到字符z的ASCII是26个连续的数值,所以字符a映射为下标0,相应的字符z映射为下标25record数组如果有的元素不为零0,说明字符串s和t一定是谁多了字符或者谁少了字符,return false

class Solution {public boolean isAnagram(String s, String t) {int[] arr = new int[26];for(char c : s.toCharArray()) {arr[c - 'a'] += 1;}for(char c : t.toCharArray()) {arr[c - 'a'] -= 1;}for(int i : arr) {if(i != 0) {return false;}}return true;}
}
Tips

给了小范围字符集可以考虑数组【简易的哈希表】
toCharArray()方法将字符串转换成字符数组.


http://www.mrgr.cn/news/45866.html

相关文章:

  • TCP(Transmission Control Protocol,传输控制协议)整理
  • 供应链管理师案例分析题3
  • Collection 和 Collections 有什么区别?
  • 【CuPy报错】NVRTC_ERROR_COMPILATION (6)找不到 ‘vector_types.h‘
  • 【RAG论文精读4】RAG论文综述1(2312.10997)-第2部分
  • 【3dgs】3DGS**(3D Geometry Sensing)与 **NeRF**(Neural Radiance Fields)对比
  • 系统架构设计师论文《论企业集成平台的技术与应用》精选试读
  • GPT-2 的 Transformer Block 设计与基础 Transformer 的比较
  • 考试宝 逆向 分析
  • MySQL 之权限与授权
  • 网络知识_001_浏览器输入域名
  • 【ShuQiHere】 K-means 聚类算法详解:公式、代码与实战
  • 代码随想录算法训练营| 669. 修剪二叉搜索树 、 108.将有序数组转换为二叉搜索树 、 538.把二叉搜索树转换为累加树
  • 陪伴系统,会成为女性向游戏的下一个争夺点吗?
  • 企业安全运行与维护(Enterprise Security Operation and Maintenance)
  • 【分布式微服务云原生】掌握Java分布式事务:2PC、3PC、TCC与Seata全解析
  • .[sspdlk00036@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • 微知-一个不错的rpm大全网站,临时找rpm包的好地方(rpmfind.net)
  • windows C++-实现 Future(一)
  • go-delve的使用