zoukankan      html  css  js  c++  java
  • 数学公式推导法解决问题

    Given a linked list, return the node where the cycle begins. If there is no cycle, return null.

    ///

    如果按照常规的思想,我们可以遍历一遍节点,使用O(n)的空间复杂度,当然这就不需要人来思考了

    ///以刷题的要求,首先判断是否有圈快慢法,然后相遇后我们发现,位置之间的联系是存在的,

    假设几个未知数,来求解方程,利用方程来求解的思想在小学奥数中想必经常出现

    在我们刷题过程我们应该经常使用。

    点的位置要有参考系,我想这点大家都懂

    所以必须,由head开始,circlestarting-point(CP)点的距离为L,meeting-point(M)到CP的距离为S

    M到CP---一圈的距离为Y,每圈长度为C,于是我们可以得到几个方程。

       2 * T = T + N1 * C    N1=0,1,2...
    

    N1为快慢指针跑的圈数差

       T = N1 * C
    
       2 * T = L + N2 * C + S    N2=0,1,2...
    

    N2为慢指针跑的圈数

    整理后(2N1-N2)×C=L+S

    设N3于是

       N3 * C = L + S  
      C=L+Y
      (N3 - 1) * C + S + Y = L + S
    
      (N3 - 1) * C + Y = L
    

    class Solution {
        public:
            ListNode *detectCycle(ListNode *head) {
                ListNode* dummy=new ListNode(-1);
                dummy->next=head;
                ListNode *slow=dummy, *fast=dummy;
                bool flag=false;
                while(fast && fast->next){
                    slow=slow->next;
                    fast=fast->next->next;
                    if(fast==slow)  { flag=true; break; }
                }
                if(!flag)   return NULL;
                ListNode* result=dummy;
                while(result != slow){
                    result=result->next;
                    slow=slow->next;
                }
                return result;
            }
        };

  • 相关阅读:
    Halcon算子翻译——else
    Halcon算子翻译——default
    halcon算子翻译——continue
    Halcon算子翻译——catch
    Halcon算子翻译——case
    生命周期
    输入流输出流
    在搜索引擎中输入汉字就可以解析到对应的域名,请问如何用LoadRunner进行测试。
    给你一个网站,你如何测试?
    你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决?
  • 原文地址:https://www.cnblogs.com/fenglongyu/p/7779021.html
Copyright © 2011-2022 走看看