第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

【九月打卡】第4天 數(shù)據(jù)結(jié)構(gòu)之“堆”

標(biāo)簽:
JavaScript

课程名称:JavaScript版数据结构与算法
课程章节:第10章 数据结构之“堆”
主讲老师:lewis

课程内容:

今天学习的内容包括:
10-1 堆简介——堆是一种特殊的完全二叉树。
10-2 JavaScript 实现:最小堆类——基于数组和深度优先遍历方法达成最小堆类相关操作。
10-3 LeetCode:215. 数组中的第 K 个最大元素——pop出K以外的最小值,获取堆顶即可。

课程收获:

堆简介

1、堆是一种特殊的完全二叉树。
2、所有的节点都大于等于(最大堆)或小于等于(最小堆)它的子节点。

JS中的堆

1、JS中通常用数组表示堆。
2、左侧子节点的位置是2* index + 1。
3、右侧子节点的位置是2 * index + 2。
4、父节点位置是(index - 1)/2。

堆的应用

1、堆能高效、快速地找出最大值和最小值,时间复杂度:O(1)。
2、找出第K个最大(小)元素。

第K个最大元素

1、构建一个最小堆,并将元素依次插入堆中。
2、当堆的容量超过K,就删除堆顶。
3、插入结束后,堆顶就是第K个最大元素。

JavaScript 实现:最小堆类

插入

1、将值插入堆的底部,即数组的尾部。
2、然后上移:将这个值和它的父节点进行交换,直到父节点小于等于这个插入的值。
3、大小为K的堆中插入元素的时间复杂度为O(logk)。

this.heap.insert()
swap(parentIndex,index)
删除堆顶

1、用数组尾部元素替换堆顶(直接删除堆顶会破坏堆结构)。
2、然后下移:将新堆顶和它的子节点进行交换,直到子节点大于等于这个新堆顶。
3、大小为k的堆中删除堆顶的时间复杂度为O(logk)。

this.heap.pop()
swap(leftIndex,index)
swap(rightIndex,index)
获取堆顶和堆的大小

1、获取堆顶:返回数组的头部。
2、获取堆的大小:返回数组的长度。

 peek(){
    return this.heap[0]
  }
  
  size(){
    return this.heap.length
  }

215. 数组中的第 K 个最大元素:可以使用最小堆实现

1、构建一个最小堆,并依次把数组的值插入堆中。
2、当堆的容量超过K,就删除堆顶。
3、插入结束后,堆顶就是第K个最大元素。
4、pop方法中会对最小堆进行一次处理,可以确保获取K值的准确性。

 const h = new MinHeap()
  nums.forEach(n=>{
    h.insert(n)
    if(h.size() > k){
      h.pop()
    }
  })
  return h.peek()

今天学习了数据结构之“堆”,感觉还不错,学知识就像喝酒一样,迷迷糊糊,晕晕乎乎,也许醉了,或许还没醉,也许会了,可能还没会,今天先到这把,对自己说一句,加油😀~

坚持打卡,坚持学习!明天见💪~

https://img1.sycdn.imooc.com//63194e970001450e24051437.jpg

https://img1.sycdn.imooc.com//6319567a00017d5023901441.jpg

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消