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

网站 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://www.mnyf.cn/news/47563.html

相关文章:

  • 支付网站搭建网站建站方式有哪些
  • 免费网站下载直播软件免费专业seo关键词优化
  • 石家庄网站定制seo排名培训
  • 建网360 网站建设搜索引擎付费推广
  • 完整网站项目的逻辑推广网站大全
  • wordpress右下角添加欢迎弹窗江苏seo网络
  • 高端网站建设设计公司排名北京网站推广公司
  • 珠海网站制作费用济南网站制作平台
  • 富顺网站建设seo顾问什么职位
  • 公安网站备案 时间北京网络营销
  • aspnet网站开发实例谷歌seo靠谱吗
  • 太原做网站需要多少钱页面关键词优化
  • 深圳知名网站建设公司山东疫情最新消息
  • b2b交易型网站建设方案优化师的工作内容
  • 网站建设教程大全 百度网盘招聘网站排名
  • 在线视频播放网站怎么做的百度账号快速注册入口
  • 吉首公司网站找谁做举三个成功的新媒体营销案例
  • 网站建设南昌网页设计基础
  • javaweb视频网站开发seo网站优化培训公司
  • 设计素材网站线上nba排行榜最新排名
  • 网站建设报价如何做营销推广
  • 涿州做网站建设数字营销服务商seo
  • 教育房地产 网站建设今天上海最新新闻事件
  • 吉林省软环境建设办公室网站网络营销的真实案例分析
  • 怎样才能申请网站如何快速优化网站排名
  • 做街机棋牌上什么网站发广告seo有些什么关键词
  • 文艺小清新ppt模板seo优化轻松seo优化排名
  • 建个人网站需要哪些长沙百度推广排名优化
  • 云端互联网站建设线上推广的渠道和方法
  • asp个人网站seo是什么意思的缩写