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

网页qq登陆保护功能怎么关闭宁波seo网站排名

网页qq登陆保护功能怎么关闭,宁波seo网站排名,做任务赚话费的网站,网站模板 asp pc wap堆的概念 逻辑结构:完全二叉树(包括大根堆,小根堆) 物理结构: 数组形式 大根堆:树中所有父亲大于等于孩子 小根堆:树中所有父亲小于等于孩子 作用:堆排序,返回前k个堆顶…

  堆的概念

        逻辑结构:完全二叉树(包括大根堆,小根堆)

        物理结构: 数组形式

        大根堆:树中所有父亲大于等于孩子

        小根堆:树中所有父亲小于等于孩子

作用:堆排序,返回前k个堆顶元素(TopK问题)

堆排序问题 

        由于我们的堆-->大根堆,小根堆都是以数组形式存储的,那么你可以通过数组的排序方法实现,例如冒泡排序,但是算法复杂度O(N^2)

        这里我们采用另外一种方式利用建立堆的方式来进行排序

利用小根堆-->降序排列,大根堆-->升序排列 。

这里我们的算法的时间复杂度为O(NlogN)。每次进行向下调整时的算法复杂度为O(logN)

堆的实现我们在二叉树中实现了,这里我们只提供排序算法接口。

算法实现:

void Heap_Sort(Heap* pheap){assert(pheap); // 初始化之后已经是小根堆了// 降序排序 // 排降序建小堆,升序要建大堆。for (size_t end = pheap->size - 1; end > 0; end--) {Swap(&pheap->arr[0], &pheap->arr[end]);       // 最小值放末尾AdjustDown(pheap->arr, end, 0);               // 重新堆化(注意 end 是新长度)}
}

返回前k个堆顶元素(TopK问题)

面试题 17.14. 最小K个数

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

示例:

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

提示:

  • 0 <= len(arr) <= 100000
  • 0 <= k <= min(100000, len(arr))

算法思路:

        N个数中找出最大的或者最小的前k个

        1、先排序再提取--冒泡排序O(N^2)

        2、大小根堆排序再提取 -- O(NlogN)

        如果我们的N非常大呢?无法内存上排序。

        3、建K个数的大根堆来解决 --> 先建k个数的大根堆,其他元素与堆顶元素比较大小,比堆顶小进入堆,然后重新再排成小根堆。

这里我们主要实现第三种思路:

        新建一个k个元素的大根堆,将数组的元素与堆顶元素比较,小于堆顶元素就放入堆内,再进行堆处理。不断重复这一过程,最后这个堆留下的就是小的那k个元素

算法的实现:

void Swap(int* p1,int* p2){assert(p1 && p2);int tmp = *p1;*p1 = *p2;*p2 = tmp;
}void AdjustDown(int* karr,int size, int root){assert(karr);int parent = root;int child = 2*parent+1;while(child<size){if(child+1<size && karr[child] < karr[child+1]){++child;}if(karr[parent]<karr[child]){Swap(&karr[parent],&karr[child]);parent =child;child = 2*parent+1;}else{break;}}
}int* smallestK(int* arr, int arrSize, int k, int* returnSize) {*returnSize = k;if(k == 0){return NULL;}int* karr = (int*) malloc(sizeof(int)*k);//初始化for(int i = 0;i<k;i++){karr[i] = arr[i];}//构建大根堆for(int root = (k-1-1)/2;root>=0;root--){AdjustDown(karr,k,root);}// 比较数组元素和堆顶元素for(int j = k;j<arrSize;j++){if(karr[0]>arr[j]){karr[0] = arr[j];AdjustDown(karr,k,0);}}return karr;
}

这里我们还是先利用到了上期内容我们实现的大根堆,小根堆的实现:二叉树的实现--堆,包括向下调整算法的应用,如何将一个数组元素排列成我们的堆。将数组中k个最小的数如何一步步存放到我们的堆的思想尤为重要,在面试题中常常出现!!

好了本期内容分享就到这结束了。谢谢大家的三连支持个

http://www.dtcms.com/wzjs/803585.html

相关文章:

  • 乐清 做网站 多少钱网站制作公司兴田德润简介
  • wordpress中英文网站外贸软件的建立
  • step7用法fc州网站建设app制作怎样可以快速
  • 做公司网站的2022年免费云服务器
  • 成都网站只找做企业网站
  • 外贸建站有哪些公司网站建设服务费交印花税吗
  • 网站开发技术网站使用特殊字体
  • 网站可以做固定资产吗宁津有培训做网站的
  • 建设网站市场规模网站建设都怎么找客户的
  • 铜仁建设局网站首页网络维护服务合同模板
  • 网站建设方面的书籍什么是互联网营销师
  • 手机网站设计wordpress禁止采集
  • 南昌门户网站建设网站建设 国家技术规范
  • 环保网站建设维护情况报告盐城专业网站建设哪家好
  • 南京做网站建设搭建的公司深圳建设交易公司
  • 力软框架做网站企业网站建设方案报价
  • 网站开发价格预算东莞手机网站建设公司
  • 遵义做网站推广哪些网站可以做花店推广
  • 59网站一起做网店女鞋做网站推广 seo的
  • 哪些网站可以接点私活做的做游戏还是做网站好
  • 看网红直播做爰的网站简述商务网站建设的步骤
  • 建设微信网站的流程图wordpress首页模板标签
  • wordpress文章中出站企业wordpress主题下载地址
  • 海口网站制作网站阿里网站备案寄材料
  • 公司网站建设泉州网站图怎么做
  • 广州网站建设支付深圳的深圳的网站建设公司
  • 站外推广6种方法租用了空间 怎样上传网站程序
  • 网站底部浮动广告代码软件开发服务外包
  • 做条形码哪个网站比较好科技型中小企业服务平台官网入口
  • 能买源码的网站有哪些网站找哪家做