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

企业网站管理系统项目文档宿迁网站建设价位

企业网站管理系统项目文档,宿迁网站建设价位,室内设计效果图qq群,店面设计效果图大全目录 题目描述: 思路: 具体实现 整体建立一个大小为N的小根堆 通过大根堆实现 完整代码 力扣链接:面试题 17.14. 最小K个数 - 力扣(LeetCode) 题目描述: 设计一个算法,找出数组中最小的…

目录

题目描述:

思路:

具体实现

整体建立一个大小为N的小根堆

通过大根堆实现

完整代码


力扣链接:面试题 17.14. 最小K个数 - 力扣(LeetCode)

题目描述:

设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。

示例:

输入: arr = [1,3,5,7,2,4,6,8], k = 4
输出: [1,2,3,4]

思路:

这个问题属于是一类问题中,即top-K问题:N个数据中,前k个最大/最小的元素,一般来说k比较小;或者是需要找到这组数据中 第k大/第k小 的数据。

根据这道的要求,我们可以有以下三种思路:

  1. 整体排序
  2. 整体建立一个大小为N的小根堆
  3. 把前K个元素创建为大根堆,遍历剩下的N-K个元素,和堆顶元素比较,如果比堆顶元素学校,则堆顶元素删除,但前元素入堆

具体实现

整体建立一个大小为N的小根堆

通过创建一个小根堆,把要全部元素都放进去,然后再把前k个元素提出来即可。

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

由PriorityQueue创建的堆默认为小根堆,所以把元素直接放进去,priorityQueue会默认成为小根堆,然后再把前k个元素放到ret数字里即可。

通过大根堆实现

这里有一个要做的地方:让PriorityQueue可以实现大根堆。

 通过 按住Crtl 鼠标点击 PriorityQueue 可以看到其中实现的方法,

 

再Crtl  鼠标点击 Comparator,看Comparator接口中的方法,

可以看到其中有个 compare方法,这便是通过比较 o1,o2的值来进行小根堆的实现,这里我们可以通过重写compare方法来实现大根堆。这里选择的是创建一个新类来实现。

class IntCmp implements Comparator<Integer> {@Overridepublic int compare(Integer o1, Integer o2) {return o2.compareTo(o1);}
}

然后把前K个元素放进大根堆,如果根节点的值大于可能要放进来的值,则把根节点删除,把该值放进来,同时PriorityQueue会保证该堆一直为大根堆。最后遍历完N-K个值后,再把这些值返回出去。

其中的过程大概如上图所示。

class Solution{public int[] smallestK(int[] arr, int k) {int[] ret = new int[k];if(arr == null || k == 0) return ret;PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(new IntCmp());for (int i = 0; i < k; i++) {priorityQueue.offer(arr[i]);}for (int i =k; i < arr.length; i++) {int peekVal = priorityQueue.peek();if(peekVal > arr[i]) {priorityQueue.peek();priorityQueue.offer(arr[i]);}}for (int i = 0; i < k; i++) {ret[i] = priorityQueue.poll();}return ret;}
}

完整代码

第一种方法,通过小根堆实现

//时间复杂度为:O((k+1)logN)
class Solution {public int[] smallestK(int[] arr, int k) {PriorityQueue<Integer> priorityQueue = new PriorityQueue<>();//时间复杂度为O(N*logN)for (int i = 0; i < arr.length; i++) {priorityQueue.offer(arr[i]);}//时间复杂度为O(K*logN)int[] ret = new int[k];for (int i = 0; i < k; i++) {ret[i] = priorityQueue.poll();}return ret;}
}

第二种方法,通过大根堆实现

class IntCmp implements Comparator<Integer> {public int compare(Integer o1, Integer o2) {return o2.compareTo(o1);}
}class Solution{public int[] smallestK(int[] arr, int k) {int[] ret = new int[k];if(arr == null || k == 0) return ret;PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(new IntCmp());for (int i = 0; i < k; i++) {priorityQueue.offer(arr[i]);}for (int i =k; i < arr.length; i++) {int peekVal = priorityQueue.peek();if(peekVal > arr[i]) {priorityQueue.peek();priorityQueue.offer(arr[i]);}}for (int i = 0; i < k; i++) {ret[i] = priorityQueue.poll();}return ret;}
}

http://www.yayakq.cn/news/958819/

相关文章:

  • 陕西企业网站建设价格个人网站建设图片素材
  • 网站建设公司网址大全群晖的网站开发
  • 龙华网站推广培训养生网站建设论文
  • 王牌网站做代理山东食品行业网站模板
  • 龙华营销型网站建设建设网站需要注意事项
  • 网站需要做404页面吗西安搬家公司收费价目表2021
  • 网站建设代码优化wordpress的数据库配置文件
  • 动态ip服务器可以做网站吗企业信息系统的架构
  • 网站建设栏目管理天眼查在线查询系统
  • 单页面网站怎么做优化排名云南微网站搭建费用
  • 做电脑网站用什么软件自媒体平台注册账号下载
  • 做微信的网站叫什么软件潍坊网站建设wancet
  • 营销型网站的分类不包含wordpress固定链接设置自定义结构
  • 做机加工的网站有什么推荐的网站
  • 深圳苏州企业网站建设服务商品牌推广方案ppt
  • 网站导航网站排名关键词
  • 网站策划书免费可以做外贸的网站有哪些
  • 响应式网站代理wordpress slide插件
  • 建设网站的一般步骤怎么接网站建设的单子
  • 漂亮的flash网站微信微网站开发
  • 影视网站搭建哪个系统好古腾堡布局的网站
  • 网站推广与品牌建设佛山建设外贸网站公司吗
  • 网站qq临时会话买外链网站
  • 网站设计开发软件网页美化工具赣州带你飞网络科技有限公司
  • 企业微网站怎么建设wordpress建设网站的方法
  • wap手机商城网站源码wordpress国旗
  • vue企业门户网站模板个人网站建站系统
  • 广州建网站辽宁省住房和城乡建设厅网站进不去
  • 温州网站制作哪家好二级建造师兼职网
  • 找人做企业网站注意啥山东省建设厅网站 - 百度