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

成都广告公司名单企业网站排名提升软件能优化

成都广告公司名单,企业网站排名提升软件能优化,常州网站建设报价,平面设计培训班大概多少钱目录 一、堆的创建: 二、堆的插入(以大根堆进行调整): 三、堆的删除(最大堆): 四、top-k问题(最小的k个数): 五、优化top-k问题: 一、堆的创…

目录

一、堆的创建:

二、堆的插入(以大根堆进行调整):

三、堆的删除(最大堆):

四、top-k问题(最小的k个数):

五、优化top-k问题:


一、堆的创建:

默认是以最小堆创建,如果要创建大根堆,那么使用如下:

//创建大根堆
PriorityQueue<Integer> queue=new PriorityQueue<>(Collections.reverseOrder());
//Collections.reverseOrder()类似于反转//默认小根堆创建
PriorityQueue<Integer> queue=new PriorityQueue<>();

二、堆的插入(以大根堆进行调整):

思路:

1.先判满,满的话就扩容,用Arrays.Copy(elem,2*elem.length)扩容。

2.向上调整

3.定义parent变量,是最后一个子树的父节点,child是最后一个节点

4.进行比较,如果elem[parent]<elem[child]就交换,循环前提是parent>=0;

    public void push(int val) {if(isFull()){elem=Arrays.copyOf(elem,2*elem.length);}else{elem[usedSize]=val;usedSize++;shiftUp(usedSize-1);}}//判满public boolean isFull() {return this.usedSize==elem.length;}//向上调整private void shiftUp(int child) {int parent=(child-1)/2;while(parent>=0){if(elem[child]>elem[parent]){int tmp=elem[child];elem[child]=elem[parent];elem[parent]=tmp;child=parent;parent=(child-1)/2;}else{break;}}}

三、堆的删除(最大堆):

思路:

1.先判空,如果是空的就抛异常

2.把堆头元素和最后一个元素进行交换,然后usedsize--,这样就会减少一个元素然后向下调整

3.循环判断child<len

4.进入循环之后,还要判断右子树是否存在,如果存在,那么说明child+1<len

5.如果elem[parent]<elem[child]就交换

/*** 出队【删除】:每次删除的都是优先级高的元素* 仍然要保持是大根堆*/public void pollHeap() {if(isEmpty()){throw new RuntimeException();}int tmp=elem[0];elem[0]=elem[usedSize-1];elem[usedSize-1]=tmp;usedSize--;shiftDown(0,usedSize);}/**** @param root 是每棵子树的根节点的下标* @param len  是每棵子树调整结束的结束条件* 向下调整的时间复杂度:O(logn)*/private void shiftDown(int root,int len) {int child=2*root+1;while(child<len){if(child+1<len&&elem[child]<elem[child+1]){child++;}if(elem[root]<elem[child]){int tmp=elem[root];elem[root]=elem[child];elem[child]=tmp;root=child;child=2*root+1;}else{break;}}}public boolean isEmpty() {return usedSize==0;}

四、top-k问题(最小的k个数):

思路:

1.先创建堆

2.把元素依次放入堆中

3.遍历前k个并打印

class Solution {public int[] smallestK(int[] arr, int k) {PriorityQueue<Integer> queue=new PriorityQueue<>(Collections.reverseOrder());for(int i=0;i< arr.length;i++){queue.offer(arr[i]);}int[] my_arr=new int[k];for(int i=0;i<k;i++){my_arr[i]=queue.poll();}return my_arr;}
}

五、优化top-k问题:

思路:

1.如果是求前k个最小,那么就要创建大根堆,如果求前k个最大,那么就创建小根堆

2.创建大小为k的大根堆,把前k个元素放入堆中

3.从k下标开始遍历,先得到堆头元素,拿去跟当前下标k的数组的元素进行比较,如果堆头元素大于当前数组下标k的值,那么就要弹出堆头元素,把数组当前下标k的值入堆。直到遍历结束,这时候堆就会得到最小的k个数。

class Solution {public int[] smallestK(int[] arr, int k) {int[] tmp=new int[k];if(k==0){return tmp;}PriorityQueue<Integer> queue=new PriorityQueue<>(Collections.reverseOrder());for(int i=0;i<k;i++){queue.offer(arr[i]);}for(int i=k;i<arr.length;i++){int val=queue.peek();if(val>arr[i]){queue.poll();queue.offer(arr[i]);}}for(int i=0;i<k;i++){tmp[i]=queue.poll();}return tmp;}
}

http://www.dtcms.com/a/468516.html

相关文章:

  • 西宁企业网站建设WordPress使用两个模板
  • 怎么做网站手机版网站开发怎么接单
  • 个体工商户网站备案流程内蒙古自治区工程建设网站
  • 做微信网站公司建设一个购物网站需要什么
  • 陕西手机网站建设公司排名张家口建设局网站
  • 企业为什么要做建站wordpress插件安装目录下
  • 五个常见的电子商务网站网址wordpress语言包插件
  • html5网站app开发在哪个彩票网站是小黄人做头像的
  • 沈阳做网站公司哪家好wordpress需要付费才能看某些页面
  • 济南网站建设行知科技不错h5手机制作软件app有哪些
  • 设计素材网站排行榜百度云手机登录入口
  • 做特卖的网站爱库存wordpress管理信息系统
  • 做视频网站 买带宽网站 东莞长安
  • 企业门户平台设计方案淘宝seo搜索引擎优化
  • 陕西公司网站建设湘潭网站建设有名磐石网络
  • 专业的顺的网站建设如何查询网站注册信息
  • 室内设计师常用网站服务品牌策划方案
  • wordpress网站 华为业务员用什么软件找客户
  • 新网站如何做排名东莞建网站找哪里
  • 网站上那些兼职网页怎么做昆明专业做网站多少钱
  • 策划的网站购物网站页面设计思路
  • 如果做网站运营网站构架图怎么做
  • 西部空间怎样上传网站2019建一个什么网站最好
  • 如何登录网站备案网站建设办公软件销售技巧
  • 建一个网站需要哪些东西三合一网站什么意思
  • 重庆房产信息网官网外贸seo网站制作
  • 商城建设网站开发住房和城乡建设部网站31号文
  • 北京城建设计集团网站深圳鹏洲建设工程有限公司网站
  • 专业做二手网站有哪些经典营销案例分析
  • 黄山网站建设哪家好企业网站搭建的优点