fast

剑指offer-链表中环的入口结点

此生再无相见时 提交于 2019-12-20 23:11:19
题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 思路 设置快慢指针,都从链表头出发,快指针每次走两步,慢指针一次走一步,假如有环,一定相遇于环中某点(结论1)。接着让两个指针分别从相遇点和链表头出发,两者都改为每次走一步,最终相遇于环入口(结论2)。以下是两个结论证明: 设置快慢指针,假如有环,他们最后一定相遇 证明: 设置快慢指针fast和low,fast每次走两步,low每次走一步。假如有环,两者一定会相遇(因为low一旦进环,可看作fast在后面追赶low的过程,每次两者都接近一步,最后一定能追上)。 两个指针分别从链表头和相遇点继续出发,每次走一步,最后一定相遇与环入口。 证明: 设: 链表头到环入口长度为–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圈。所以两个指针分别从链表头和相遇点出发,最后一定相遇于环入口。

R-CNN , Fast R-CNN , Faster R-CNN原理及区别

為{幸葍}努か 提交于 2019-12-18 12:44:24
github博客传送门 csdn博客传送门 ==RCNN== 1、生成候选区域 使用Selective Search(选择性搜索)方法对一张图像生成约2000-3000个候选区域,基本思路如下: (1)使用一种过分割手段,将图像分割成小区域 (2)查看现有小区域,合并可能性最高的两个区域,重复直到整张图像合并成一个区域位置。优先合并以下区域: 颜色(颜色直方图)相近的 纹理(梯度直方图)相近的 合并后总面积小的 合并后,总面积在其BBOX中所占比例大的 在合并时须保证合并操作的尺度较为均匀,避免一个大区域陆续“吃掉”其它小区域,保证合并后形状规则。 (3)输出所有曾经存在过的区域,即所谓候选区域 2、特征提取 使用深度网络提取特征之前,首先把候选区域归一化成同一尺寸227×227。 使用CNN模型进行训练,例如AlexNet,一般会略作简化。 3、类别判断 对每一类目标,使用一个线性SVM二类分类器进行判别。 输入为深度网络(如上图的AlexNet)输出的4096维特征,输出是否属于此类。 4、位置精修 目标检测的衡量标准是重叠面积:许多看似准确的检测结果,往往因为候选框不够准确, 重叠面积很小,故需要一个位置精修步骤,对于每一个类,训练一个线性回归模型去判定这个框是否框得完美。 ==Fast R-CNN== Fast R-CNN主要解决R-CNN的以下问题: 1、训练

leetcode 141. 环形链表 C语言

旧巷老猫 提交于 2019-12-18 02:56:51
给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 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 解释:链表中没有环。 进阶: 你能用 O(1)(即,常量)内存解决此问题吗? /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ bool hasCycle(struct ListNode *head) { struct ListNode *slow = NULL; struct ListNode *fast = NULL; if ((head == NULL) || (head->next == NULL)) { return false; } slow = head; fast = head->next;

Leetcode刷题日记之环形链表II

ぐ巨炮叔叔 提交于 2019-12-17 23:07:43
一:问题描述 环形链表 II 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null 。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1 ,则在该链表中没有环。 说明: 不允许修改给定的链表。 示例 1: 输入: head = [3,2,0,-4], pos = 1 输出: tail connects to node index 1 解释: 链表中有一个环,其尾部连接到第二个节点。 示例 2: 输入: head = [1,2], pos = 0 输出: tail connects to node index 0 解释: 链表中有一个环,其尾部连接到第一个节点。 示例 3: 输入: head = [1], pos = -1 输出: no cycle 解释: 链表中没有环。 二:问题分析 以下分析为leetcode官方题解 Floyd 算法 想法 当然一个跑得快的人和一个跑得慢的人在一个圆形的赛道上赛跑,会发生什么?在某一个时刻,跑得快的人一定会从后面赶上跑得慢的人。 算法 Floyd 的算法被划分成两个不同的 阶段 。在第一阶段,找出列表中是否有环,如果没有环,可以直接返回 null 并退出。否则,用 相遇节点 来找到环的入口。 阶段 1 这里我们初始化两个指针 - 快指针和慢指针

tcp流量控制和拥塞控制的四个算法

本秂侑毒 提交于 2019-12-15 23:54:15
流量控制概念 拥塞控制 慢开始(Slow-Start)和拥塞避免(Congestion Avoidance)结合 拥塞窗口 cwnd ssthresh 快重传(Fast Retransmit)和快恢复(Fast Recovery)结合 3个以上的重复ACK https://blog.csdn.net/seu_calvin/article/details/53198282 来源: 51CTO 作者: WDPQW 链接: https://blog.51cto.com/13747009/2167313

R-CNN、Fast R-CNN,Faster R-CNN

 ̄綄美尐妖づ 提交于 2019-12-11 09:02:52
最近正要看Contextual Action Recognition with R*CNN,学习基于动态图像图像的行为识别,所以要恶补下它所需要的知识。 也就是目标检测常见的几种算法。 1、首先目标检测是什么? 在给定的图片中找到物体的所在位置,并且分辨出物体的类别。这实际上是两个任务。 图像识别:image ----> cat/dog 图像定位:image ---->(x,y,w,h) 2、实现目标检测的几种方法: 1)传统的目标检测方法 大概思路是:采用classification和regression相结合的方式,对一张图片,用各种大小的框(遍历整张图片)将图片截取出来,输入到CNN,然后CNN会输出这个框的得分(classification)以及这个框图片对应的x,y,h,w(regression)。 问题:基于滑动窗口的选择策略没有针对性,窗口冗余,时间复杂度高 检测多个物体很难进行。 2)候选区域+深度学习分类 R-CNN 为了防止基于滑动窗口的选择策略没有针对性,我们可以实现在途中找出目标可能出现的位置(利用颜色,纹理,边缘等等),即候选区域。 简要步骤: (1) 输入测试图像 (2) 利用选择性搜索Selective Search算法在图像中从下到上提取2000个左右的可能包含物体的候选区域Region Proposal (3) 因为取出的区域大小各自不同

回文链表

白昼怎懂夜的黑 提交于 2019-12-11 06:28:49
请判断一个链表是否为回文链表。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 最容易想到方法:(超时) 转换成数组然后一个从前遍历、一个从后遍历,直到相遇,但是出现超时问题 快慢指针+头插法建立单链表 快慢指针我们很容易求出单链表中居于中间位置的值 头插法,可以实现原地单链表逆序,我们只是逆序单链表中间位置之前的数据 public boolean isPalindrome ( ListNode head ) { if ( head == null || head . next == null ) return true ; ListNode slow = head , fast = head ; ListNode pre = head ; //新链表的头================ ListNode newhead = new ListNode ( 0 ) ; newhead . next = null ; //========================= while ( fast != null && fast . next != null ) { pre = slow ; //====快慢指针========== slow = slow . next ; fast = fast . next . next

力扣练习——移除元素(python)

烈酒焚心 提交于 2019-12-10 14:12:45
力扣练习——移除元素(python) 问题描述 思路与提示 思路 官方提示 代码 while 循环 双指针 总结 这个题解决了两个疑问: 1.for循环中不能用原地法将列表中的特定元素删除干净,但while循环可以(解释)。 2.双指针的思想很巧妙 问题描述 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。 示例 2: 给定 nums = [0,1,2,2,3,0,4,2], val = 2, 函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。 注意这五个元素可为任意顺序。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/remove-element 思路与提示 思路 如果将列表中值为val的元素直接pop或者remove出,很容易就可以实现。但是操作的时候发现用for 循环无法将列表中的特定元素删除干净。 官方提示 1.Try two

faster rcnn新的理解

北慕城南 提交于 2019-12-10 03:33:54
本篇文章结合了源码解读记忆对于faster rcnn进行一些新的看法 精髓就是:使用深度卷积网络选出候选框,fast rcnn选出候选区域,attention,RPN告诉fast rcnn 到底应该关注哪里。 首先faster rcnn在定义网络结构的时候,是在原来的特征提取网络的基础上进行微调的,所以网络结构主要分为 Extrator:利用CNN进行特征提取,网路结构可以采用VGG16也可以采用resnext,或者直接使用与训练模型,可以将conv5-3的输出作为图片的特征输入到RPN中,因为这一层的感受野为16,相当于原始图片的大小。 RPN。候选区域网络,为ROIhead模块提取候选区域,是一个完全的卷积网络,可端到端的训练,产生检测区域,anchor就是多尺度宽高比 ROIhead:负责ROI的微调 RPN可以使用反向传播算法和SGD进行端到端的训练,作者遵循image-centric采样原则,训练网络,每个mini-batch都是从一个image中产生,包含很多正anchor和负anchor的例子。这样优化损失函数是可能的,但是由于负anchor按主导地位,可能会产生偏差。因此,一个mini-batch中随机抽选了一个image中的256个anchor来计算损失函数,其中正负比为1:1,如果一个image中正样本少于128,则使用负样本补足。 新的层权重都使用均值0

LeetCode - 快慢指针

大城市里の小女人 提交于 2019-12-09 23:06:20
快慢指针: 双指针的一种。在链表中设置两个指针,不同步地遍历链表。可以在两个指针之间制造我们需要的距离。 LeetCode 141 环形链表 easy 题面纯属为了测试时修改样例用,只要按判断链表中是否存在环做就行了。 思路一:Hash 最容易想到的思路应该是哈希法,每当一个链表被访问过了,就把它记录在哈希表里,当链表中存在环时就会有重复访问的节点,代码略。 思路二:快慢指针 设置两个指针,fast和slow,步长分别为2,1。如果将链表比作跑道,这就意味着fast的速度是slow的两倍。而当链表中存在环时,fast再快也不会访问到NULL,而又因为fast速度快,早晚会超过slow一整圈,即一段时间后两指针会重新相遇(fast==slow)。 1 class Solution { 2 public: 3 bool hasCycle(ListNode *head) { 4 if(NULL==head||NULL==head->next) 5 return false; 6 7 ListNode *slow=head; 8 ListNode *fast=head; 9 10 while(NULL!=fast&&NULL!=fast->next) 11 { 12 fast=fast->next->next; 13 slow=slow->next; 14 if(fast==slow)