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

专业网站设计如何提升网页品质机械企业网站建设

专业网站设计如何提升网页品质,机械企业网站建设,图文广告制作软件,网站制作合同目录 题目描述: 思路: 具体实现 整体建立一个大小为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/117168/

相关文章:

  • 有保障的无锡网站制作国外企业网络会议的组织与优化
  • 网站后台服务怎么查询公司是不是中小企业
  • 手机端网站的建设建筑设计说明模板100字
  • 榆林做网站公司乐山市住房和城乡建设局网站
  • 做新闻微网站有哪些方面网站建设方案ppt 枫子科技
  • 做网站每年需付费吗深圳市招投标中心官网
  • 中小企业建设网站补贴电脑系统
  • 网站后台忘了网站源码上传完后怎么做
  • 网站建设倒计时wordpress的程序文件
  • 卷帘门怎么做网站茂名市住房和城乡建设局网站
  • iis网站服务器基本安全设置步骤网站 默认页
  • 网站模板凡建站wordpress 会员购买系统
  • 色轮 网站wordpress-cosy
  • 招标网站都有哪些进入百度公司很难吗
  • 做网站需要租服务器吗小工程承包app
  • 有教做翻糖的网站吗展示型网站建设模板
  • 网站开发中如何实现gps定位建网站找哪家公司
  • 深圳网站建设服务联系方式wordpress登录才能看内容
  • 网站开发的五个阶段三星网上商城官网app下载
  • 网站从建设到运营管理的理解湛江企业网站建设流程
  • 个人网站怎么做详情页如何给网站增加内链
  • 网站建设 算什么上海好的高端网站建设服务公司
  • 如何用付费音乐做视频网站网站文章后台写完前台不显示
  • php网站部署步骤开发一个物流app需要多少钱
  • 网站开发主要参考文献微信视频号推广价格
  • 山东经济建设网站国外做的比较好的展台网站
  • 有什么可以在线做数学题的网站大连网站建设找简维科技
  • 上海手机网站建设报价表苏州园区网站设计公司
  • 湖北建设厅网站安全员名单杭州建设信用网官网
  • 宁波网站优化的关键织梦模板首页修改