亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

JAVASCRIPT算法(5)

ysl_unh / 804人閱讀

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

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

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

分析:還是通過快慢指針來解決,兩個(gè)指針從頭節(jié)點(diǎn)開始,慢指針每次向后移動(dòng)一步,快指針每次向后移動(dòng)兩步,如果存在環(huán),那么兩個(gè)指針一定會(huì)在環(huán)內(nèi)相遇。首先單鏈表有環(huán)是什么一種結(jié)構(gòu)呢? 小b這種結(jié)構(gòu)么? 因?yàn)橹荒苁菃畏较虻闹敢?,所以?yīng)該是小b這種結(jié)構(gòu)。兩個(gè)指針先后進(jìn)入環(huán)里面,一個(gè)比另一個(gè)每次快一步,是不是一定會(huì)遇上。是的。那么如果快兩步呢?就是一個(gè)指針每次走3步,另一個(gè)每次走一步?相遇的話,快的那個(gè)是不是一定領(lǐng)先慢的那個(gè)若干個(gè)圈的長(zhǎng)度?假設(shè)經(jīng)過x步相遇,那么領(lǐng)先2x個(gè)節(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錯(cuò)誤。
          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 回到鏈表的頭部,重新走,每次步長(zhǎng)不是走 2 了,而是走 1,那么當(dāng) p1 和 p2 再次相遇的時(shí)候,就是在環(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;
  }

想畫個(gè)圖來著。還是算了吧。反正走了x步相遇,那么快的領(lǐng)先慢的x步,正好是一圈的長(zhǎng)度。
假設(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)以一樣的一格一格跑,必在入口處相遇。
還是畫個(gè)圖吧。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.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)目,包含圖的演示過程與視頻講解。該倉(cāng)庫(kù)包含了多種基于的算法與數(shù)據(jù)結(jié)構(gòu),提供進(jìn)一步閱讀的解釋和鏈接。數(shù)據(jù)結(jié)構(gòu)和算法必知必會(huì)的個(gè)代碼實(shí)現(xiàn)。 showImg(https://segmentfault.com/img/bVbvpYZ); 前言 算法為王。想學(xué)好前端,先練好內(nèi)功,內(nèi)功不行,就算招式練的再花哨,終究成不了高手;只有內(nèi)功深厚者,前端之路才會(huì)走得...

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

    摘要:之所以把冒泡排序選擇排序插入排序放在一起比較,是因?yàn)樗鼈兊钠骄鶗r(shí)間復(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 評(píng)論0 收藏0
  • JavaScript 數(shù)據(jù)結(jié)構(gòu)與算法之美 - 十大經(jīng)典排序算法匯總

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

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

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

    itvincent 評(píng)論0 收藏0
  • javascript中可能用到的算法排序

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

    Bamboy 評(píng)論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 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

ysl_unh

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<