成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JAVASCRIPT算法(5)

ysl_unh / 739人閱讀

摘要:繼續(xù)鏈表算法有點(diǎn)恍恍惚惚。兩個指針先后進(jìn)入環(huán)里面,一個比另一個每次快一步,是不是一定會遇上。只是為了保證可以執(zhí)行操作。反正走了步相遇,那么快的領(lǐng)先慢的步,正好是一圈的長度。所以如果快節(jié)點(diǎn)從頭開始和慢節(jié)點(diǎn)以一樣的一格一格跑,必在入口處相遇。

繼續(xù)鏈表算法
有點(diǎn)恍恍惚惚。

題目描述:判斷一個單鏈表是否有環(huán)

分析:還是通過快慢指針來解決,兩個指針從頭節(jié)點(diǎn)開始,慢指針每次向后移動一步,快指針每次向后移動兩步,如果存在環(huán),那么兩個指針一定會在環(huán)內(nèi)相遇。首先單鏈表有環(huán)是什么一種結(jié)構(gòu)呢? 小b這種結(jié)構(gòu)么? 因?yàn)橹荒苁菃畏较虻闹敢?,所以?yīng)該是小b這種結(jié)構(gòu)。兩個指針先后進(jìn)入環(huán)里面,一個比另一個每次快一步,是不是一定會遇上。是的。那么如果快兩步呢?就是一個指針每次走3步,另一個每次走一步?相遇的話,快的那個是不是一定領(lǐng)先慢的那個若干個圈的長度?假設(shè)經(jīng)過x步相遇,那么領(lǐng)先2x個節(jié)點(diǎn)。所以圈內(nèi)節(jié)點(diǎn)數(shù)一定要是偶數(shù)才行?先想題目吧。

  function linkedListWithCircle(head){
      if(head==null||head.next==null) return false;
      var fastNode = head;
      var normalNode = head;
      while(fastNode!=null&&fastNode.next!=null){//只是為了保證可以執(zhí)行fastNode.next.next操作。避免null.next錯誤。
          fastNode = fastNode.next.next;
          normalNode = normalNode.next;
          if(normalNode==fastNode) return true;
      }
      return false;
  }

題目描述:判斷單鏈表是否有環(huán),如果有,找到環(huán)的入口點(diǎn)

分析:由上題可知,按照 p2 每次兩步,p1 每次一步的方式走,發(fā)現(xiàn) p2 和 p1 重合,確定了單向鏈表有環(huán)路了。接下來,讓 p2 回到鏈表的頭部,重新走,每次步長不是走 2 了,而是走 1,那么當(dāng) p1 和 p2 再次相遇的時候,就是在環(huán)路的入口點(diǎn)。加深思考。

 function findLoopPort(head){
      if(head==null||head.next==null) return null;
      var fastNode = head;
      var normalNode = head;
      var hasCircle = false;
      while(fastNode != null&&fastNode.next != null){
          fastNode = fastNode.next.next;
          normalNode = normalNode.next;
          if(normalNode == fastNode) {
              hasCircle = true;
              break;
          }
      }
      if(!hasCircle) return null;//原本想return false,后來發(fā)現(xiàn)還是null好。
      var fastNode = head;
      while(fastNode != normalNode){
          fastNode = fastNode.next;
          normalNode = normalNode.next;
      }
      return fastNode;
  }

想畫個圖來著。還是算了吧。反正走了x步相遇,那么快的領(lǐng)先慢的x步,正好是一圈的長度。
假設(shè)從頭節(jié)點(diǎn)到圈的入口要走m步,那么慢節(jié)點(diǎn)在圈內(nèi)走了x-m步,從相遇的節(jié)點(diǎn)到入口節(jié)點(diǎn),差x-(x-m)=m步。
所以如果快節(jié)點(diǎn)從頭開始和慢節(jié)點(diǎn)以一樣的一格一格跑,必在入口處相遇。
還是畫個圖吧。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/90219.html

相關(guān)文章

  • 優(yōu)秀程序員都應(yīng)該學(xué)習(xí)的 GitHub 上開源的數(shù)據(jù)結(jié)構(gòu)與算法項(xiàng)目

    摘要:強(qiáng)烈推薦上值得前端學(xué)習(xí)的數(shù)據(jù)結(jié)構(gòu)與算法項(xiàng)目,包含圖的演示過程與視頻講解。該倉庫包含了多種基于的算法與數(shù)據(jù)結(jié)構(gòu),提供進(jìn)一步閱讀的解釋和鏈接。數(shù)據(jù)結(jié)構(gòu)和算法必知必會的個代碼實(shí)現(xiàn)。 showImg(https://segmentfault.com/img/bVbvpYZ); 前言 算法為王。想學(xué)好前端,先練好內(nèi)功,內(nèi)功不行,就算招式練的再花哨,終究成不了高手;只有內(nèi)功深厚者,前端之路才會走得...

    cheukyin 評論0 收藏0
  • JavaScript 數(shù)據(jù)結(jié)構(gòu)與算法之美 - 冒泡排序、插入排序、選擇排序

    摘要:之所以把冒泡排序選擇排序插入排序放在一起比較,是因?yàn)樗鼈兊钠骄鶗r間復(fù)雜度都為。其中,冒泡排序就是原地排序算法。所以冒泡排序是穩(wěn)定的排序算法。選擇排序思路選擇排序算法的實(shí)現(xiàn)思路有點(diǎn)類似插入排序,也分已排序區(qū)間和未排序區(qū)間。 showImg(https://segmentfault.com/img/bVbuvnj?w=900&h=250); 1. 前言 算法為王。 想學(xué)好前端,先練好內(nèi)功,...

    canger 評論0 收藏0
  • JavaScript 數(shù)據(jù)結(jié)構(gòu)與算法之美 - 十大經(jīng)典排序算法匯總

    摘要:筆者寫的數(shù)據(jù)結(jié)構(gòu)與算法之美系列用的語言是,旨在入門數(shù)據(jù)結(jié)構(gòu)與算法和方便以后復(fù)習(xí)。這應(yīng)該是目前較為簡單的十大經(jīng)典排序算法的文章講解了吧。比如原本在的前面,而,排序之后,在的后面十大經(jīng)典排序算法冒泡排序思想冒泡排序只會操作相鄰的兩個數(shù)據(jù)。 showImg(https://segmentfault.com/img/bVbvHet); 1. 前言 算法為王。想學(xué)好前端,先練好內(nèi)功,內(nèi)功不行,就...

    zsy888 評論0 收藏0
  • 深入淺出 JavaScript 的 Array.prototype.sort 排序算法

    摘要:快速排序是不穩(wěn)定的排序算法。瀏覽器的實(shí)現(xiàn)不同有什么影響排序算法不穩(wěn)定有什么影響舉個例子某市的機(jī)動車牌照拍賣系統(tǒng),最終中標(biāo)的規(guī)則為按價格進(jìn)行倒排序相同價格則按照競標(biāo)順位即價格提交時間進(jìn)行正排序。 本文要解決的問題 1、找出 Array.prototype.sort 使用的什么排序算法 2、用一種直觀的方式展示 Array.prototype.sort 的時間復(fù)雜度,看看它有多快? 3、...

    itvincent 評論0 收藏0
  • javascript中可能用到的算法排序

    摘要:因?yàn)槭窃谝呀?jīng)分組排序過的基礎(chǔ)上進(jìn)行插入排序,所以效率高。本質(zhì)上來看,快速排序應(yīng)該算是在冒泡排序基礎(chǔ)上的遞歸分治法。形成左右兩個分區(qū),再遞歸按之前的步驟排序。 算法復(fù)雜度 不是科班生的我,第一次看見時間復(fù)雜度之類的名詞表示很懵逼,所以就找了網(wǎng)上的資料補(bǔ)習(xí)了下: 時間復(fù)雜度:是指執(zhí)行算法所需要的計算工作量 空間復(fù)雜度:是指算法在計算機(jī)內(nèi)執(zhí)行時所需存儲空間的度量 排序算法穩(wěn)定性: 假定在待...

    Bamboy 評論0 收藏0
  • JavaScript數(shù)據(jù)結(jié)構(gòu)和算法

    摘要:棧被稱為一種后入先出的數(shù)據(jù)結(jié)構(gòu)。散列使用的數(shù)據(jù)結(jié)構(gòu)叫做散列表。這些操作需要求助于其他數(shù)據(jù)結(jié)構(gòu),比如下面介紹的二叉查找樹。 前言 在過去的幾年中,得益于Node.js的興起,JavaScript越來越廣泛地用于服務(wù)器端編程。鑒于JavaScript語言已經(jīng)走出了瀏覽器,程序員發(fā)現(xiàn)他們需要更多傳統(tǒng)語言(比如C++和Java)提供的工具。這些工具包括傳統(tǒng)的數(shù)據(jù)結(jié)構(gòu)(如鏈表,棧,隊(duì)列,圖等),...

    EastWoodYang 評論0 收藏0

發(fā)表評論

0條評論

ysl_unh

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<