fast

给定一个链表,判断链表中是否有环(Java实现)

守給你的承諾、 提交于 2020-03-04 14:38:40
public class LinkedList { //给定一个链表,判断链表中是否有环 class ListNode { int val ; ListNode next ; ListNode ( int x ) { val = x ; } } public boolean hasCycle ( ListNode head ) { //先判断链表是否合法 if ( head == null ) { return false ; } //快慢指针法,创建两个指针,快指针 fast 一次走两步,慢指针 slow 一次走一步,如果相遇,表示有环,否则无环 ListNode fast = head ; ListNode slow = head ; while ( fast != null && fast . next != null ) { fast = fast . next . next ; slow = slow . next ; if ( fast == slow ) { return true ; } } return false ; } } 来源: CSDN 作者: JIAYU. 链接: https://blog.csdn.net/qq_45914985/article/details/104650636

给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null(Java实现)

社会主义新天地 提交于 2020-03-04 06:44:45
public class LinkedList { //给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null //为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环 class ListNode { int val ; ListNode next ; ListNode ( int x ) { val = x ; } } public ListNode detectCycle ( ListNode head ) { if ( head == null ) { return null ; } ListNode fast = head ; ListNode slow = head ; while ( true ) { //如果 fast 遇到 null,说明链表无环,直接返回 null if ( fast == null || fast . next == null ) { return null ; } fast = fast . next . next ; slow = slow . next ; //如果 fast 遇见 slow ,则表示有环,跳出循环 if ( fast == slow ) { break ; } } //在链表开始再创建一个 cur, cur 和

链表--链表中环的入口节点

你离开我真会死。 提交于 2020-03-03 10:41:22
此题设快慢两个指针,先判断是否有环:如果为环快慢指针终会相遇; 找入口节点:快慢指针相遇的节点到入口节点的距离,与从头节点开始新的慢指针到相遇点的距离相同。 可画图演示。因为快指针是慢指针的两倍速,且他们在q点相遇,则我们可以得到等式 2(A+B) = A+B+C+B.得出C=A function EntryNodeOfLoop(pHead){ if(pHead == null || pHead.next == null||pHead.next.next==null){ return null; } let fast = pHead; let slow = pHead; while(fast != null && fast.next != null){ fast = fast.next.next; slow = slow.next; if(fast == slow){ let slow2 = pHead; while(slow2 != slow){ slow2 = slow2.next; slow = slow.next; } return slow2; } } } 来源: https://www.cnblogs.com/mlebk/p/12396046.html

【经典问题】快速找到未知长度单链表的中间节点

大憨熊 提交于 2020-03-03 02:21:01
普通的方法很简单,首先遍历一遍单链表以确定单链表的长度L。然后再次从头节点出发循环L/2次找到单链表的中间节点。算法复杂度为O(L+L/2)=O(3L/2)。 能否再优化一下这个时间复杂度呢?有一个很巧妙的方法: 设置两个指针* fast、*slow都指向单链表的头节点。其中* fast的移动速度是* slow的2倍。当* fast指向末尾节点的时候,slow正好就在中间了。 C源代码如下: Java代码 void locate(LinkedList *head){ LinkedList *fast, *slow; fast=slow=head; while (fast->next!=NULL){ //fast的移动速度是slow的2倍 if (fast->next->next!=Null){ fast=fast->next->next; slow=slow->next; } else { fast=fast->next; } } } 来源: https://www.cnblogs.com/c-cloud/archive/2013/04/19/3031679.html

【力扣】141. 环形链表

匆匆过客 提交于 2020-03-01 05:51:36
一、题目描述: 给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 示例 1: 输入:head = [ 3,2,0,-4 ] , pos = 1 输出:true 解释:链表中有一个环,其尾部连接到第二个节点。 示例 2: 输入:head = [ 1,2 ] , pos = 0 输出:true 解释:链表中有一个环,其尾部连接到第一个节点。 示例 3: 输入:head = [ 1 ] , pos = -1 输出:false 解释:链表中没有环。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/linked-list-cycle 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 二、题目分析: 使用快慢指针,slow一次走一步,fast一次走两步,slow和fast重合则表示有环。 三、代码描述: /** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */

深度学习之路(四):Fast-RCNN

ぃ、小莉子 提交于 2020-03-01 01:39:35
前文中已经讲述了R-CNN以及SPP-Net两个经典的入门级算法,下来向我们走来的是R-CNN家族的另一位优秀代表——Fast-RCNN。region proposal Fast-RCNN顾名思义,就是快速的R-CNN,其目的就是解决R-CNN训练慢、检测慢的难题。 一. 论文解读 Fast-RCNN的论文是就是《Fast R-CNN》,其作者是rbg大神,论文简单明了,目的性贼强。(百度云链接: https://pan.baidu.com/s/1fQlWVSY19kphn8X9zOyGEA ,提取码:aglm)。 Fast-RCNN是建立在以前所使用的的卷积神经网络有效地分类目标的成果上的。其采用了多项技术,从而提高训练速度和检测速速来提高检测精度。Fast-RCNN在训练VGG-16时比R-CNN 快9倍,检测时快213倍,并且还取得了较高的检测精度(在PASCAL VOC数据集上)。 论文的第一章简介中介绍了当前的图像分类与检测算法的发展已经取得了较大的成就,But,目标检测由于其复杂性检测不光慢,还检测精度差。然后论文就对就说明了产生复杂性的两个原因:其一是必须处理大量的候选区域,其二是候选框定位不准确,需要精细化以实现定位。这些问题的解决必然会造成检测速度慢,检测精度差。然后,论文就把自己的Fast-RCNN提出来了。 接下来论文又较为详细的分析R-CNN与SPP

常见的单链表题目

不羁岁月 提交于 2020-02-29 22:10:10
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)

快慢指针

丶灬走出姿态 提交于 2020-02-29 09:23:45
所谓快慢指针中的快慢指的是指针向前移动的步长,每次移动的步长较大即为快,步长较小即为慢,常用的快慢指针一般是在单链表中让快指针每次向前移动2,慢指针则每次向前移动1。 快慢指针在提高查找性能方面的作用还是比较可观的,如以下应用: (1)如何快速找出未知长度单链表的中间节点? 普通方法:先遍历一遍单链表确定其长度L后,再从头节点出发循环L/2次即可查找到单链表的中间节点。该问题如果采用普通的方法虽然简单,但是查找效率太低。 快慢指针: 设置两个指针*fast、*slow都指向单链表的头节点,其中*fast的移动速度是*slow的2倍,当*fast指向末尾节点的时候,slow正好就在中间了,可以大大提高查找的效率。 当然,此时算法 还要考虑链表结点个数的奇偶数因素,当快指针移动x次后到达表尾(1+2x),说明链表有奇数个结点,直接返回慢指针指向的数据即可。如果快指针是倒数第二个结点,说明链表结点个数是偶数,这时 可以 实际情况 返回上中位数或下中位数或(上中位数+下中位数)的一半。 1 while (fast&&slow) 2 { 3   if (fast->next==NULL) 4    return slow ->data; 5   else if (fast->next!= NULL && fast->next->next== NULL) 6    return (slow -

LeetCode 876. Middle of the Linked List(获得链表中心结点)

浪子不回头ぞ 提交于 2020-02-28 13:28:17
题意: 获得链表中心结点。当有两个中心结点时,返回第二个。 分析: 快慢指针。 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* middleNode(ListNode* head) { if(head == NULL || head -> next == NULL) return head; ListNode *fast = head; ListNode *slow = head; while(fast && fast -> next){ fast = fast -> next -> next; slow = slow -> next; } return slow; } };    来源: https://www.cnblogs.com/tyty-Somnuspoppy/p/12376649.html

研一汇报第十二周【下学期】

浪尽此生 提交于 2020-02-27 19:03:36
本次汇报内容 1、论文 《Fast R-CNN》Microsoft Research 2015年 / 《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition 》空间金字塔池化网络,何恺明 2014年 2、 《Fast R-CNN》Microsoft Research Fast Region-based Convolutional Network 快速的基于区域的卷积网络 概要: Fast R-CNN以之前的工作为基础,利用深度卷积网络对项目提案进行有效分类,Fast R-CNN对VGG16网络进行了9倍于R-CNN的训练,在测试时的速度是213倍,并在 PASCAL VOC 2012 上实现了更高的mAP(检测质量)。与 SPPnet 金字塔网络相比,Fast R-CNN训练VGG16 3倍快,测试10倍快。 问题:R-CNN,候选窗口的特征是借助深度神经网络进行抽取的,在VOC和ImageNet数据集上都表现出了出色的检测精度。但R-CNN的特征计算十分耗时,因为它对每张图片中的上千个变形后的区域的像素反复调用CNN,SPPnet只需要在整张图片上运行一次卷积网络层(不关心窗口的数量),然后再使用SPP-net在特征图上抽取特征。这个方法缩减了上百倍的耗时。