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

做网页赚钱的网站东莞疫情最新消息

做网页赚钱的网站,东莞疫情最新消息,怎么做时时彩彩票网站,石家庄网站建设兼职处理大规模数据时获取前N个最大/最小元素是一个常见问题,以下是几种Java实现方案: 1. 使用优先队列(最小堆) - 最优方案 import java.util.PriorityQueue;public class Top10Elements {public static int[] findTop10(int[] num…

处理大规模数据时获取前N个最大/最小元素是一个常见问题,以下是几种Java实现方案:

1. 使用优先队列(最小堆) - 最优方案

import java.util.PriorityQueue;public class Top10Elements {public static int[] findTop10(int[] nums) {// 使用最小堆,容量保持为10PriorityQueue<Integer> minHeap = new PriorityQueue<>(10);for (int num : nums) {if (minHeap.size() < 10) {minHeap.offer(num);} else if (num > minHeap.peek()) {minHeap.poll();  // 移除堆顶最小元素minHeap.offer(num);  // 插入新元素}}// 将结果转为数组int[] result = new int[10];for (int i = 9; i >= 0; i--) {result[i] = minHeap.poll();}return result;}
}

时间复杂度:O(n log k),其中n是1亿,k是10。这种方法只需要O(n)的遍历时间和O(log k)的堆操作时间。

空间复杂度:O(k),只需要维护大小为10的堆。

2. 使用快速选择算法 - 适合内存有限情况

import java.util.Arrays;public class Top10Elements {public static int[] findTop10(int[] nums) {quickSelect(nums, 0, nums.length - 1, 10);// 此时前10个元素是最大的,但不一定有序int[] result = Arrays.copyOf(nums, 10);Arrays.sort(result);  // 如果需要有序结果// 反转数组使从大到小排序for (int i = 0; i < 5; i++) {int temp = result[i];result[i] = result[9 - i];result[9 - i] = temp;}return result;}private static void quickSelect(int[] nums, int left, int right, int k) {if (left >= right) return;int pivot = partition(nums, left, right);if (pivot == k) {return;} else if (pivot < k) {quickSelect(nums, pivot + 1, right, k);} else {quickSelect(nums, left, pivot - 1, k);}}private static int partition(int[] nums, int left, int right) {int pivot = nums[right];int i = left;for (int j = left; j < right; j++) {if (nums[j] >= pivot) {  // 降序排列swap(nums, i, j);i++;}}swap(nums, i, right);return i;}private static void swap(int[] nums, int i, int j) {int temp = nums[i];nums[i] = nums[j];nums[j] = temp;}
}

时间复杂度:平均O(n),最坏O(n^2),但实际应用中表现良好。

3. 并行处理方案(针对超大数据集)

import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveTask;public class ParallelTop10 {private static final int THRESHOLD = 1_000_000;public static int[] findTop10(int[] nums) {ForkJoinPool pool = new ForkJoinPool();return pool.invoke(new TopKTask(nums, 0, nums.length - 1, 10));}private static class TopKTask extends RecursiveTask<int[]> {private final int[] nums;private final int start, end;private final int k;TopKTask(int[] nums, int start, int end, int k) {this.nums = nums;this.start = start;this.end = end;this.k = k;}@Overrideprotected int[] compute() {if (end - start < THRESHOLD) {return sequentialTopK(nums, start, end, k);}int mid = start + (end - start) / 2;TopKTask left = new TopKTask(nums, start, mid, k);TopKTask right = new TopKTask(nums, mid + 1, end, k);left.fork();int[] rightResult = right.compute();int[] leftResult = left.join();return merge(leftResult, rightResult, k);}private int[] sequentialTopK(int[] nums, int start, int end, int k) {PriorityQueue<Integer> minHeap = new PriorityQueue<>(k);for (int i = start; i <= end; i++) {if (minHeap.size() < k) {minHeap.offer(nums[i]);} else if (nums[i] > minHeap.peek()) {minHeap.poll();minHeap.offer(nums[i]);}}int[] result = new int[k];for (int i = k - 1; i >= 0; i--) {result[i] = minHeap.poll();}return result;}private int[] merge(int[] a, int[] b, int k) {PriorityQueue<Integer> minHeap = new PriorityQueue<>(k);for (int num : a) {if (minHeap.size() < k) {minHeap.offer(num);} else if (num > minHeap.peek()) {minHeap.poll();minHeap.offer(num);}}for (int num : b) {if (minHeap.size() < k) {minHeap.offer(num);} else if (num > minHeap.peek()) {minHeap.poll();minHeap.offer(num);}}int[] result = new int[k];for (int i = k - 1; i >= 0; i--) {result[i] = minHeap.poll();}return result;}}
}

实际应用建议

  1. 内存足够:优先使用最小堆方案,实现简单且效率高

  2. 内存有限:考虑快速选择算法

  3. 超大数据集:使用并行处理方案

  4. 数据存储在外部:考虑分批读取+堆处理的方式

对于1亿个数据,最小堆方案通常是最佳选择,因为它只需要O(n)的时间和O(10)的额外空间。

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

相关文章:

  • 今日头条移动建站工具谷歌浏览器网址
  • 做旅游网站的目的百度竞价推广的技巧
  • 北碚区建设银行网站网站搭建
  • 徐州市建设工程信息服务平台seo优化啥意思
  • wordpress 首页评论优化 seo
  • 网站设置方案热狗seo顾问
  • zzcms网站开发免费b站推广网站短视频
  • 电商网站建设目的及网站的优势seo推广是什么意思
  • 给别人做网站怎么赚钱吗新站整站优化
  • 做一手房开什么网站比较好呢seo兼职平台
  • 政和网站建设wzjseo百度关键字推广费用
  • 可以做围棋习题的网站成都企业网站seo技术
  • b2c网站可分为无线网络优化
  • 个人备案做别的网站seo推广怎么做视频教程
  • 网站主色调市场营销公司
  • 如何在百度上添加店铺的位置句容市网站seo优化排名
  • 网站建设文章免费的关键词优化工具
  • 东莞网站建设兼职日照网络推广
  • 动物大联盟微信小程序入口seo是什么意思蜘蛛屯
  • 做游戏开箱网站的法律风险百度网页pc版登录
  • 怎么做本地婚姻介绍网站网络推广外包联系方式
  • wordpress 是php苏州吴中区seo关键词优化排名
  • 渭南建网站如何在微信上做推广
  • 做word文档什么网站好百度谷歌seo优化
  • 手机网站怎么制作软件百度的营销推广模式
  • 上海人才网网址sem和seo的区别
  • 可以做动画的网站有哪些百度手机卫士下载安装
  • 网站出现风险如何处理方法潍坊网站外包
  • 重庆网站建设公司是什么在线视频用什么网址
  • 网站建设开场白石家庄seo报价