Java实现堆及其功能,海量算法高频面试题精编解析【附源码】_程序员阿水

        int tmp=this.elem[child];          this.elem[child]=this.elem[parents];          this.elem[parents]=tmp;          child=parents;          parents=(child-1)/2;          }else {          break;      }  }  } 
 [](  )三、出堆(出队列)  ============================================================================  返回优先级最高的对象,即头节点,将头结点和最后一个元素交换,剪掉最后一个元素,调用调整方法重新键堆  代码如下(示例): 

public void pop(){

   /* if(isEmpty()){          return;      }*/      int tmp=this.elem[0];      this.elem[0]=this.elem[this.usedSize-1];      this.elem[this.usedSize-1]=tmp;      this.usedSize--;      adjustDown(0,this.usedSize);  } 
 [](  )四、优先级队列  ========================================================================== 

PriorityQueue<Integer>priorityQueue=new PriorityQueue<>();//优先级队列 默认是小堆

    //改为大堆       PriorityQueue<Integer>priorityQueue1=new PriorityQueue<>(new Comparator<Integer>() {//改为大堆          @Override          public int compare(Integer o1, Integer o2) {              return o2-o1;          }      }); 
 [](  )五、TopK问题  ===========================================================================  即找出数组中前K个最值问题,时间复杂度为nlogK,    如果找的是前K个最大值,    1.建立大小为K的小堆    2.遍历数组将K个元素放入堆中    3.从K+1位置开始和堆顶元素进行比较    4.如果比堆顶元素大的话,就出小的元素,之后大的入堆    5.最终输出小堆就前K个最大元素    找最小值就是建大堆。 

public static void TopK(int[]array,int k){

PriorityQueue<Integer> minHeap=new PriorityQueue<>(k);

for (int i=0;i<array.length;i++){      if(k>0){          minHeap.offer(array[i]);          k--;      }else {          Integer val=minHeap.peek();          if(array[i]>val){//如果K+1位置的值大于堆顶的元素 就出              minHeap.poll();              minHeap.offer(array[i]);          }      }  }  System.out.println(minHeap);

}

 [](  )六、堆排序  ========================================================================  从小到大排序,建立一个大堆 每次将堆顶元素和最后位置元素调换,end位置减1,将所有位置都调整完成后,就是有序的。 

//堆排序 从小到大排序 应该是建大堆(能知道最上面是最大的)

public static void heapSort(int []array){      createHeap(array);      int end=array.length-1;     // while(){//循环 建立大堆 每次都是头最大 交换 尾巴节点      while (end>0){          int tmp=array[0];          array[0]=array[end];          array[end]=tmp;          adjust(array,0,end);

最后

俗话说,好学者临池学书,不过网络时代,对于大多数的我们来说,我倒是觉得学习意识的觉醒很重要,这是开始学习的转折点,比如看到对自己方向发展有用的信息,先收藏一波是一波,比如如果你觉得我这篇文章ok,先点赞收藏一波。这样,等真的沉下心来学习,不至于被找资料分散了心神。慢慢来,先从点赞收藏做起,加油吧!

CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】

另外,给大家安排了一波学习面试资料:

Java实现堆及其功能,海量算法高频面试题精编解析【附源码】_程序员阿水

Java实现堆及其功能,海量算法高频面试题精编解析【附源码】_程序员阿水

以上就是本文的全部内容,希望对大家的面试有所帮助,祝大家早日升职加薪迎娶白富美走上人生巅峰!

本站由小牛团队全力维护,小牛十年了,大家已经步入中年 。本站源码全部经过团队成员测试并调试,价格可能比其它网站略贵几元钱,不解释!
小牛资源 » Java实现堆及其功能,海量算法高频面试题精编解析【附源码】_程序员阿水

发表评论

全站资源亲测可用,价格略高几元,不解释

立即查看 了解详情