fast

剑指Offer

穿精又带淫゛_ 提交于 2020-02-27 17:26:41
题目:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 思路: 设置快慢指针,都从链表头出发, 快指针每次 走两步 ,慢指针一次 走一步 ,假如有环, 一定相遇于环中某点(结论1)。接着让两个指针分别从相遇点和链表头出发,两者都改为每次 走一步 ,最终相遇于环入口(结论2)。以下是两个结论证明: 两个结论: 1、设置快慢指针,假如有环,他们最后一定相遇。 2、两个指针分别从链表头和相遇点继续出发,每次走一步,最后一定相遇与环入口。 证明结论1 :设置快慢指针fast和low,fast每次走两步,low每次走一步。假如有环,两者一定会相遇(因为low一旦进环,可看作fast在后面追赶low的过程,每次两者都接近一步,最后一定能追上)。 证明结论2: 设: 链表头到环入口长度为-- a 环入口到相遇点长度为-- b 相遇点到环入口长度为-- c 则:相遇时 快指针路程=a+(b+c)k+b ,k>=1 其中b+c为环的长度,k为绕环的圈数(k>=1,即最少一圈,不能是0圈,不然和慢指针走的一样长,矛盾)。 慢指针路程=a+b 快指针走的路程是慢指针的两倍,所以: (a+b)*2=a+(b+c)k+b 化简可得: a=(k-1)(b+c)+c 这个式子的意思是: 链表头到环入口的距离=相遇点到环入口的距离+(k-1)圈环长度 。其中k>=1,所以 k-1>=0

leetcode141——Linked List Cycle

做~自己de王妃 提交于 2020-02-27 14:13:13
题目大意:判断链表中是否有环 分析:快慢指针相遇则有环 代码: /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: bool hasCycle(ListNode *head) { ListNode* fast = head; ListNode* slow = head; while(fast && fast->next){ fast = fast->next->next; slow = slow->next; if(slow == fast) return true; } return false; } }; 来源: CSDN 作者: tzyshiwolaogongya 链接: https://blog.csdn.net/tzyshiwolaogongya/article/details/104533092

「算法」环形链表 & 环形链表 II

徘徊边缘 提交于 2020-02-27 14:03:04
00141 环形链表 题目描述 给定一个链表,判断链表中是否有环。 实例 1: 输入:head = [3,2,0,-4], pos = 1 输出:true 解释:链表中有一个环,其尾部连接到第二个节点。 示例 2: 输入:head = [1,2], pos = 0 输出:true 解释:链表中有一个环,其尾部连接到第一个节点。 示例 3: 输入:head = [1], pos = -1 输出:false 解释:链表中没有环。 力扣地址 https://leetcode.com/problems/linked-list-cycle https://leetcode-cn.com/problems/linked-list-cycle 解题报告 哈希表 本题解由微信公众号 小猿刷题 提供, 错误之处, 欢迎指正. 通过检查一个结点此前是否被访问过来判断链表是否为环形链表。常用的方法是使用哈希表. /** * 微信公众号"小猿刷题" * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public boolean

Fast Development Kit(FDK)-教程

泄露秘密 提交于 2020-02-27 04:18:28
Fast Development Kit(FDK)是本人实践中总结的一套开发工具,包括了常用的工具集,已经制作好发布在根文件系统中,目前支持Xilinx zynq,Xilinx zynqmp,NXP t2080,海思 hi3531d等。 目录 Fast Development Kit(FDK)-嵌入式Linux开发包介绍 Fast Development Kit(FDK)-使用说明 Fast Development Kit(FDK)-固件部署与升级 Fast Development Kit(FDK)-根文件系统功能和使用 来源: CSDN 作者: 黑客三遍猪 链接: https://blog.csdn.net/Zhu_Zhu_2009/article/details/104520053

142. 环形链表 II

不打扰是莪最后的温柔 提交于 2020-02-26 04:58:11
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 说明:不允许修改给定的链表。 代码实现: /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode *detectCycle(ListNode *head) { ListNode *low = head; ListNode *fast = head; ListNode *meet = NULL; while(fast) { fast = fast->next; low = low->next; if(!fast) return NULL; fast = fast->next; if(low == fast) { meet = fast; break; } } if(meet == NULL) return NULL; while(head && meet) /

论文笔记:SlowFast Networks

帅比萌擦擦* 提交于 2020-02-25 19:58:33
粗读概念 1.论文提出了什么? 论文提出了一种视频分类的新方法, 新方法有两条pathway. 第一条是Slow pathway,主要作用在低帧率的模式下,捕获spatial semantics;另外一条是Fast pathway,主要作用在高帧率的模式下,依靠时间维度上的高分辨率捕获视频的动作信息。这种方法的intuition是现实生活中大多数动作都是比较慢的,例如人,从整体看他可能在空间上没有动作,此时用Slow pathway能更好的捕获他的spatial semantic信息,而同时,他的手可能在以一个比较高的速度挥舞,此时利用Fast pathway可以更好的捕捉手部的动作信息,结合这两条通路信息,则可以更好地表示人物的spatial semantic和motion信息。 2. 方法概述 方法很简洁,就是slow,fast两条通路,最后融合预测 精读 3.SlowFast Networks 3.1 Slow Pathway 可以是任何的CNN网络,例如i3d,Slow主要体现在视频的采样帧率上,这篇论文里面temporal stride是16(也就是每16个frame提1) 论文中使用的backbone是3D ResNet,*论文中提到没有使用temporal downsampling,因为在输入步长很大的时候会造成信息损失(文中步长为16) 此外Slow

快慢指针实现不依赖计数器寻找中位数(linked list)

夙愿已清 提交于 2020-02-25 12:33:19
该方法在不借助 计数器 变量实现寻找中位数的功能。原理是:快指针的移动速度是慢指针移动速度的2倍,因此当快指针到达 链表 尾时,慢指针到达中点。程序还要考虑链表结点个数的奇偶数因素,当快指针移动x次后到达表尾(1+2x),说明链表有奇数个结点,直接返回慢指针指向的数据即可。如果快指针是倒数第二个结点,说明链表结点个数是偶数,这时 可以 根据 “规则”返回上中位数或下中位数或(上中位数+下中位数)的一半。 while (fast&&slow)   {   if (fast->next==NULL)   return slow ->data;   else if (fast->next!= NULL && fast->next->next== NULL)   return (slow ->data + slow ->next->data)/2;   else   {   fast= fast->next;   fast= fast->next;   slow = slow ->next;   }   } 来源: https://www.cnblogs.com/mdz-great-world/p/6549816.html

Make it run, make it right, make it fast

冷暖自知 提交于 2020-02-23 10:12:17
如果问我工作十多年后相比刚毕业参加的时候,学到了哪些重要的经验,那么“Make it work, make it right, make it fast”一定是其中最重要的经验之一。第一次听到这句话是从以前老板 @沈嵘 那里,然后发现是来源自大牛 Kent Beck 《Make It Work Make It Right Make It Fast》。这是软件项目开发的一条经典原则,实际上不限于软件开发领域,它把一个项目分成三个阶段,每个阶段有不同的侧重。 Make it work 在这个阶段,了解项目需求后,聚焦于项目所需要的最小需求,尽快让项目先跑起来,不必过于追求设计和性能。同时,展示你的结果,并根据反馈快速调整。 这个阶段的重点在于需求的响应,以最快的速度实现需求。这是个快速试错,快速迭代,验证需求的过程。 Make it right 到了这个阶段,需求基本上已经稳定,要保证项目执行结果正确,更多的测试,尽可能少的bug。但"Make it right"并不仅仅意味着只要结果正确就够了,还需要对系统进行重构,优化系统设计,让代码更简洁结构更清晰,易于扩展和维护。 这个阶段的重点在于保障系统的稳定,同时优化设计和重构。 Make it fast 当系统已经稳定,设计也趋于成熟的时候,还需要对系统进行性能上的优化,良好的性能,不仅可以提升用户体验,同时也能降低运维的成本。这里的

Java实现 LeetCode 160 相交链表

对着背影说爱祢 提交于 2020-02-22 23:06:56
160. 相交链表 编写一个程序,找到两个单链表相交的起始节点。 如下面的两个链表: 在节点 c1 开始相交。 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3 输出:Reference of the node with value = 8 输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。 示例 2: 输入:intersectVal = 2, listA = [0,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1 输出:Reference of the node with value = 2 输入解释:相交节点的值为 2 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [0,9,1,2,4],链表 B 为 [3,2,4]。在 A 中,相交节点前有 3 个节点;在 B 中,相交节点前有 1 个节点。 示例 3: 输入:intersectVal = 0, listA = [2,6,4]

常见的单链表题目

天涯浪子 提交于 2020-02-22 02:29:29
1、判断一个单链表中是否有环 思路:给定两个指针fast和low都指向头结点,然后low每次前进一步,fast每次前进两步,如果此单链表中有环,那么fast和low一定会相遇,否则fast一定会先遇到null。实现代码如下: bool isCircle(LinkList *head){ LinkList *fast = head;//快指针 LinkList *low = head;//慢指针 while(low->next != NULL && fast->next->next != NULL) { low = low->next; fast = fast->next->next; if (low == fast) { return true; } } return false;} 现在还有个问题需要思考, 为什么如果链表有环,fast和low就一定会相遇呢? 假设单链表长度为n,且该单链表是环状的。 ① 若low和fast的起点相同,那么第i次迭代时,low指向元素(i mod n),q指向(2i mod n)。因此当i≡2i(mod n)时,fast和low相遇。而i≡2i(mod n) → (2i-i)mod n=0 → (i mod n) = 0 →当i=n时,fast和low相遇。 ② 若low和fast的起点不同,假设第i次迭代时low指向元素(i mod n)