news 2026/10/8 7:16:51

简单堆和桶排序(自用)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
简单堆和桶排序(自用)

一、 堆: 了解下就好


(1)堆是完全二叉树的结构
什么是完全二叉树:

1.只允许最后一行不满

2.最后一行必须从左往右排,中间不能有间隔


(2)堆序性

1.小根堆,父节点都要更小

2.大根堆,父节点都要更大


(3)堆的存储,因为是完全二叉树,所以可以根据层序遍历,来得到一个数组,此时,父节点为i时,左右子节点一定为2i+1/2


(4)堆有两个基本操作:

1.上滤,通常用于插入新元素到根中时,向上调整位置时
2.下滤(因为必须要满足堆序性的话,所以对不满足的要操作),把根节点向下调整的操作叫下滤


(5)自顶向下建堆法:

1.插入堆

2.上滤


(6)自下而上建堆法:

对每个父节点进行下滤(从最下面的父节点开始)--复杂度O(N)
(7)应用

1.优先队列:弹出最小元素--可以用来实现堆排序,用大根堆排序完,弹出的是正序,小根堆反

2.插入:就是上滤


java中常见写法

最大堆:(Lamda)

PriorityQueue<Integer> maxHeap = new PriorityQueue<>((a, b) -> b - a);

最小堆:

一般直接这么写就行

PriorityQueue<Integer> small_stack = new PriorityQueue<>();

lamda

二、桶排序

例题:前K个高频元素

class Solution { public int[] topKFrequent(int[] nums, int k) { // 第一步:统计每个元素的出现次数 Map<Integer, Integer> cnt = new HashMap<>(); for (int x : nums) { cnt.merge(x, 1, Integer::sum); // cnt[x]++ } int maxCnt = Collections.max(cnt.values()); // 第二步:把出现次数相同的元素,放到同一个桶中 List<Integer>[] buckets = new ArrayList[maxCnt + 1]; Arrays.setAll(buckets, _ -> new ArrayList<>()); for (Map.Entry<Integer, Integer> e : cnt.entrySet()) { buckets[e.getValue()].add(e.getKey()); } // 第三步:倒序遍历 buckets,把出现次数前 k 大的元素加入答案 int[] ans = new int[k]; int j = 0; for (int i = maxCnt; i >= 0 && j < k; i--) { // 注意题目保证答案唯一,一定会出现某次循环结束后 j 恰好等于 k 的情况 for (int x : buckets[i]) { ans[j++] = x; } } return ans; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/8 0:17:26

fft npainting lama断点续修功能实现:中间结果保存策略

fft npainting lama断点续修功能实现&#xff1a;中间结果保存策略 1. 引言 在图像修复任务中&#xff0c;用户经常需要对同一张图像进行多轮、分区域的修复操作。尤其是在处理复杂场景&#xff08;如大面积物体移除、多个水印去除&#xff09;时&#xff0c;一次性完成所有修…

作者头像 李华
网站建设 2026/10/5 10:08:11

YOLOv9训练日志备份:云端存储同步方案

YOLOv9训练日志备份&#xff1a;云端存储同步方案 在深度学习模型训练过程中&#xff0c;尤其是使用YOLOv9这类高性能目标检测框架时&#xff0c;训练日志、权重文件和实验记录的完整性至关重要。一旦本地环境出现故障或资源释放&#xff0c;未及时备份的数据将面临永久丢失风…

作者头像 李华
网站建设 2026/10/5 10:08:21

边缘计算新选择:Qwen3-VL-8B在MacBook上的完整部署教程

边缘计算新选择&#xff1a;Qwen3-VL-8B在MacBook上的完整部署教程 1. 引言&#xff1a;为什么要在边缘设备上运行多模态大模型&#xff1f; 随着AI技术的快速发展&#xff0c;多模态大模型&#xff08;视觉语言&#xff09;正从云端走向本地终端。然而&#xff0c;大多数高性…

作者头像 李华
网站建设 2026/10/4 18:58:55

MinerU批量处理脚本:for循环自动化提取实战代码

MinerU批量处理脚本&#xff1a;for循环自动化提取实战代码 1. 引言 1.1 业务场景描述 在实际的文档处理工作中&#xff0c;我们经常面临大量PDF文件需要转换为结构化Markdown格式的需求。例如&#xff0c;在构建知识库、整理学术资料或进行企业文档归档时&#xff0c;手动逐…

作者头像 李华
网站建设 2026/10/5 7:12:47

ms-swift+Swift UI:可视化监控训练全过程

ms-swiftSwift UI&#xff1a;可视化监控训练全过程 在大模型时代&#xff0c;微调&#xff08;Fine-tuning&#xff09;已成为释放预训练模型潜力的核心手段。然而&#xff0c;随着模型规模不断攀升、训练任务日益复杂&#xff0c;传统的命令行式训练方式已难以满足开发者对可…

作者头像 李华
网站建设 2026/10/7 4:30:04

多模态AI商业化:Qwen3-VL-2B在各行业的应用前景

多模态AI商业化&#xff1a;Qwen3-VL-2B在各行业的应用前景 1. 引言&#xff1a;视觉理解机器人的兴起 随着人工智能从单一模态向多模态演进&#xff0c;具备“看懂世界”能力的视觉语言模型&#xff08;Vision-Language Model, VLM&#xff09;正成为AI商业化的关键突破口。…

作者头像 李华