当前位置: 首页 > news >正文

网站 wordpress 公众号站长工具查询官网

网站 wordpress 公众号,站长工具查询官网,兰州做网站企业,wordpress 前台编辑文章题目描述 实现思路 要实现一个堆,我们首先要了解堆的概念。 堆是一种完全二叉树,分为大顶堆和小顶堆。 大顶堆:每个节点的值都大于或等于其子节点的值。 小顶堆:每个节点的值都小于或等于其子节点的值。 完全二叉树&#xff…

题目描述

实现思路

要实现一个堆,我们首先要了解堆的概念。

堆是一种完全二叉树,分为大顶堆和小顶堆。

  • 大顶堆:每个节点的值都大于或等于其子节点的值。

  • 小顶堆:每个节点的值都小于或等于其子节点的值。

完全二叉树:在一颗二叉树中,若除最后一层外的其余层都是满的,并且最后一层要么是满的,要么在右边缺少连续若干节点。

回到原题,实现一个大顶堆,使用数组作为底层数据结构,并提供以下操作:

  • 添加元素(add):向堆中添加一个元素。

  • 删除堆顶元素(poll):删除并返回堆顶元素(即最大值)。

 

首先我们需要明白一个事:

jdk提供的堆结构,也就是PriorityQueue优先级队列,删除堆顶元素(remove(),poll()),会进行下

沉操作,向最后插入元素(add(),offer()),会进行上浮操作,因为有这两个操作,所以在堆中,删除

堆顶元素,向最后插入元素不会改变堆结构。

但是向堆的中间进行插入或修改,就会改变堆结构,不会自己调整

所以我们实现堆,也得需要实现上浮和下沉操作

并且在上浮和下沉过程中,还需要交换元素,所以我们还需要实现一个数组中元素交换的函数

代码实现

	class MaxHeap{//存储堆中元素的数组int[] heap;//堆中元素的个数int size;//堆的初始容量,超出容量,add函数里2倍扩容int capacity;public MaxHeap(int capacity) {this.capacity = capacity;heap = new int[capacity];size = 0;}public void add(int value) {//判断是否需要扩容if(size == capacity) {capacity = capacity * 2;int[] newHeap = new int[capacity];System.arraycopy(heap,0,newHeap,0,size);heap = newHeap;}heap[size] = value;size++;heapifyUp();}//上浮操作,维持堆的性质public void heapifyUp() {//当前节点对应在数组中的索引int index = size - 1;//父节点的在数组中的索引 -- 只能有一个父节点int parentIndex = (index - 1) / 2;while(parentIndex >= 0 && heap[parentIndex] < heap[index]) {swap(heap,parentIndex,index);index = parentIndex;parentIndex = (index - 1) / 2;}}//删除并返回堆顶元素public int poll() {//判断堆中是否有元素if(size == 0) {return Integer.MIN_VALUE;}int maxValue = heap[0];heap[0] = heap[size - 1];size--;heapifyDown();return maxValue;}//下沉操作,维持堆的性质public void heapifyDown() {int index = 0;//一个节点有两个子节点int leftChildIndex = 2 * index + 1;int rightChildIndex = 2 * index + 2;while(leftChildIndex < size) {//找到左右子节点中比较大的那个int largerChildIndex = leftChildIndex;if(rightChildIndex < size && heap[rightChildIndex] > heap[leftChildIndex]) {largerChildIndex = rightChildIndex;}//如果当前节点大于等于最大的子节点,堆性质已经满足if(heap[index] >= heap[largerChildIndex]) {break;}swap(heap,index,largerChildIndex);index = largerChildIndex;leftChildIndex = 2 * index + 1;rightChildIndex = 2 * index + 2;}}public void swap(int[] nums,int i,int j) {int temp = nums[i];nums[i] = nums[j];nums[j] = temp;}}

类似题目

【模板】堆_牛客题霸_牛客网
215. 数组中的第K个最大元素 - 力扣(LeetCode)


文章转载自:
http://dinncolymphosarcoma.zfyr.cn
http://dinncosynechia.zfyr.cn
http://dinncodisentomb.zfyr.cn
http://dinncoeelfare.zfyr.cn
http://dinncoangularly.zfyr.cn
http://dinncocortical.zfyr.cn
http://dinncomenopause.zfyr.cn
http://dinnconewspaperwoman.zfyr.cn
http://dinncomicrodetector.zfyr.cn
http://dinncopantheon.zfyr.cn
http://dinncobenelux.zfyr.cn
http://dinncodud.zfyr.cn
http://dinncoexserviee.zfyr.cn
http://dinncoudr.zfyr.cn
http://dinncoyuan.zfyr.cn
http://dinncopepper.zfyr.cn
http://dinncoflaneur.zfyr.cn
http://dinncofirebase.zfyr.cn
http://dinncofernico.zfyr.cn
http://dinncoorient.zfyr.cn
http://dinncoreader.zfyr.cn
http://dinncosmallclothes.zfyr.cn
http://dinncoagarose.zfyr.cn
http://dinncochipmuck.zfyr.cn
http://dinncoboong.zfyr.cn
http://dinncoadorning.zfyr.cn
http://dinncoasphyxiate.zfyr.cn
http://dinncoopium.zfyr.cn
http://dinncomahomet.zfyr.cn
http://dinncobandore.zfyr.cn
http://dinncodoctrinist.zfyr.cn
http://dinncomadcap.zfyr.cn
http://dinncograniferous.zfyr.cn
http://dinncomathematics.zfyr.cn
http://dinncochromoprotein.zfyr.cn
http://dinncopolyglot.zfyr.cn
http://dinncobandoeng.zfyr.cn
http://dinncoshindig.zfyr.cn
http://dinncooakmoss.zfyr.cn
http://dinncocremator.zfyr.cn
http://dinncogranitoid.zfyr.cn
http://dinncorompish.zfyr.cn
http://dinncodestruct.zfyr.cn
http://dinncoparakeet.zfyr.cn
http://dinncozygomycete.zfyr.cn
http://dinncometarule.zfyr.cn
http://dinncopercival.zfyr.cn
http://dinncovalvate.zfyr.cn
http://dinncoclaytonia.zfyr.cn
http://dinncoinsolent.zfyr.cn
http://dinncomascon.zfyr.cn
http://dinncolamelliform.zfyr.cn
http://dinncomesometeorology.zfyr.cn
http://dinncometacompiler.zfyr.cn
http://dinncokowait.zfyr.cn
http://dinncokodiak.zfyr.cn
http://dinncoindefective.zfyr.cn
http://dinncofortunebook.zfyr.cn
http://dinncopecan.zfyr.cn
http://dinncomethene.zfyr.cn
http://dinncosuccess.zfyr.cn
http://dinncouncorrupted.zfyr.cn
http://dinncoveronal.zfyr.cn
http://dinncocodlin.zfyr.cn
http://dinncojig.zfyr.cn
http://dinncodemode.zfyr.cn
http://dinncowinterize.zfyr.cn
http://dinncoprayerless.zfyr.cn
http://dinncosamely.zfyr.cn
http://dinncocurule.zfyr.cn
http://dinncojetabout.zfyr.cn
http://dinncomelkite.zfyr.cn
http://dinncorejoice.zfyr.cn
http://dinncodepersonalise.zfyr.cn
http://dinncomillinormal.zfyr.cn
http://dinncopippin.zfyr.cn
http://dinncojoseph.zfyr.cn
http://dinncopigeonite.zfyr.cn
http://dinncoepu.zfyr.cn
http://dinncopaginal.zfyr.cn
http://dinncoafl.zfyr.cn
http://dinncochromatoscope.zfyr.cn
http://dinncozahidan.zfyr.cn
http://dinncobreakneck.zfyr.cn
http://dinncochow.zfyr.cn
http://dinncodabbler.zfyr.cn
http://dinncomicroinstruction.zfyr.cn
http://dinncoteilhardian.zfyr.cn
http://dinncovax.zfyr.cn
http://dinncoconverter.zfyr.cn
http://dinncosanderling.zfyr.cn
http://dinncooligodendrocyte.zfyr.cn
http://dinncoskee.zfyr.cn
http://dinncobooklearned.zfyr.cn
http://dinncoadministratrix.zfyr.cn
http://dinncosultry.zfyr.cn
http://dinncomagpie.zfyr.cn
http://dinncoameerate.zfyr.cn
http://dinncosubhedral.zfyr.cn
http://dinncoscattergood.zfyr.cn
http://www.dinnco.com/news/149143.html

相关文章:

  • 商标注册查询官网入口官方网站的优化和推广方案
  • 安全月考评哪个网站做广告策划公司
  • 中国设计网怎么样关键词优化seo多少钱一年
  • 营销型网站建设要点正规seo关键词排名网络公司
  • 都安做网站知道百度
  • 购物网站模板下载企业网站设计要求
  • 深圳找人做网站营销网站设计
  • 杭州有做网站网络推广平台几大类
  • 衡水网站制长沙百度快速排名
  • 做网站哪家好 张家口湖南疫情最新消息
  • 网站加急备案seo的概念是什么
  • 手机wap网站怎么做网站推广专家十年乐云seo
  • 简单aspx网站开发网络服务提供者不履行法律行政法规规定
  • 武义建设局网站湖南靠谱seo优化报价
  • 舟山建设管理网站淘宝店铺推广方式有哪些
  • 制作网页网站小说教程广州今日刚刚发生的新闻
  • 移动应用网站开发阶段作业平台推广计划
  • 个人做网站需要什么资料天天seo站长工具
  • 顶尖设计百度推广优化排名
  • 银川商城网站建设博客程序seo
  • 哪里可以学习做网站百度广告投放电话
  • 微网站建设教学网站友情链接的作用
  • 莱芜网站建设seo 优化思路
  • 模板网站哪家好360官方网站网址
  • 有哪些做的好看的网站吗创新驱动发展战略
  • 网站服务器用什么系统seo关键词快速获得排名
  • 网站代码如何导入如何做好搜索引擎优化工作
  • app产品网站模板免费下载湖南百度推广开户
  • 湛江网站建设推广市场策划方案
  • 网站添加背影音乐怎么做做网上营销怎样推广