一个较好的方法:先拿出10000个建立小根堆,对于剩下的元素,如果大于堆顶元素的值,删除堆顶元素,再进行插入操作,否则直接跳过,这样知道所有元素遍历完,堆中的10000个就是最大的10000个。时间复杂度: m + (n-1)logm = O(nlogm) 优化的方法:可以把所有10亿个数据分组 ...
最小堆 最小堆是一种完全二叉树,特点是根节点比两个子节点都小 或者根节点比子节点都大 过程 先找 个数构建最小堆 依次遍历 亿个数,如果比最小堆的最小值大,则替换这个最小值,并重新构建最小堆 最后输入 个值 时间复杂度 构建最小堆的复杂度为 logn,求出最大m个数会构建m次最小堆,时间复杂度为 m logm, 这里m为 进行n次时间复杂度为n,这里n为 亿,总时间复杂度为 n m logm,即 ...
2018-05-01 10:53 0 2403 推荐指数:
一个较好的方法:先拿出10000个建立小根堆,对于剩下的元素,如果大于堆顶元素的值,删除堆顶元素,再进行插入操作,否则直接跳过,这样知道所有元素遍历完,堆中的10000个就是最大的10000个。时间复杂度: m + (n-1)logm = O(nlogm) 优化的方法:可以把所有10亿个数据分组 ...
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jj12345jj198999/article/details/17169559 ...
前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅场的心已经按捺不住了),这个问题还是建立最小堆比较好一些。 先拿10000个数建堆,然后一次添加剩余元素,如果大于堆顶的数(10000中最小的),将这个数替换堆顶 ...
从10000个整数中找出最大的10个,最好的算法是什么? 算法一:冒泡排序法 千里之行,始于足下。我们先不说最好,甚至不说好。我们只问,如何“从10000个整数中找出最大的10个”?我最先想到的是用冒泡排序的办法:我们从头到尾走10趟,自然会把最大的10个数找到。方法简单,就不再这里写 ...
输入10个整数,将其中最小的数与第一个数对换, 把最大的数与最后一个数对换。 点我看视频讲解+可运行代码,记得收藏视频,一键三连 写3个函数: ①输人10个数; ②进行处理; ③输出10个数。 解题思路: 在进行数值逐个比较的同时找到最小值的空间地址以及最大值的空间地址,使用这两个空间 ...
/* * Copyright (c) 2016, 安徽大学计算机科学与技术学院 * All rights reserved. * 作 者: 杨磊 * 完成日期:2016 年 12 月 29 日 * 问题描述: * 输入10个整数,将其中最小的数和第一个数对换,把最大的数和最后一个数对换。 * 写 ...
输入10个整数,将其中最小的数与第一个数对换, 把最大的数与最后一个数对换 写3个函数: ①输人10个数; ②进行处理; ③输出10个数。 解题思路: 在进行数值逐个比较的同时找到最小值的空间地址以及最大值的空间地址,使用这两个空间中的数据最终与第一和最后数据进行对换即可。 答案: ...
/* * 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。 * 编写3个函数:(1)输入10个数;(2)进行处理;(3)输出10个数。 */ #include<iostream> using namespace std; /* * 用符号常量 ...