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

C语言 | Leetcode C语言题解之第480题滑动窗口中位数

题目:

题解:

struct Heap {int* heap;int heapSize;int realSize;bool (*cmp)(int, int);
};void init(struct Heap* obj, int n, bool (*cmp)(int, int)) {obj->heap = malloc(sizeof(int) * (n + 1));obj->heapSize = 0;obj->cmp = cmp;
}bool cmp1(int a, int b) {return a < b;
}bool cmp2(int a, int b) {return a > b;
}void swap(int* a, int* b) {int tmp = *a;*a = *b, *b = tmp;
}void push(struct Heap* obj, int x) {int p = ++(obj->heapSize), q = p >> 1;obj->heap[p] = x;while (q) {if (!obj->cmp(obj->heap[q], obj->heap[p])) {break;}swap(&(obj->heap[q]), &(obj->heap[p]));p = q, q = p >> 1;}
}void pop(struct Heap* obj) {swap(&(obj->heap[1]), &(obj->heap[(obj->heapSize)--]));int p = 1, q = p << 1;while (q <= obj->heapSize) {if (q + 1 <= obj->heapSize) {if (obj->cmp(obj->heap[q], obj->heap[q + 1])) {q++;}}if (!obj->cmp(obj->heap[p], obj->heap[q])) {break;}swap(&(obj->heap[q]), &(obj->heap[p]));p = q, q = p << 1;}
}int top(struct Heap* obj) {return obj->heap[1];
}bool empty(struct Heap* obj) {return obj->heapSize == 0;
}struct HashTable {int key;int val;UT_hash_handle hh;
} * hashtable;void prune(struct Heap* obj) {while (!empty(obj)) {int num = top(obj);struct HashTable* tmp;HASH_FIND_INT(hashtable, &num, tmp);if (tmp == NULL) {break;}tmp->val--;if (!(tmp->val)) {HASH_DEL(hashtable, tmp);free(tmp);}pop(obj);}
}void makeBalance(struct Heap* small, struct Heap* large) {if (small->realSize > large->realSize + 1) {push(large, top(small));pop(small);--(small->realSize);++(large->realSize);prune(small);} else if (small->realSize < large->realSize) {push(small, top(large));pop(large);++(small->realSize);--(large->realSize);prune(large);}
}void insert(struct Heap* small, struct Heap* large, int num) {if (empty(small) || num <= top(small)) {push(small, num);++(small->realSize);} else {push(large, num);++(large->realSize);}makeBalance(small, large);
}void erase(struct Heap* small, struct Heap* large, int num) {struct HashTable* tmp;HASH_FIND_INT(hashtable, &num, tmp);if (tmp == NULL) {tmp = malloc(sizeof(struct HashTable));tmp->key = num;tmp->val = 1;HASH_ADD_INT(hashtable, key, tmp);} else {tmp->val++;}if (num <= top(small)) {--(small->realSize);if (num == top(small)) {prune(small);}} else {--(large->realSize);if (num == top(large)) {prune(large);}}makeBalance(small, large);
}double getMedian(struct Heap* small, struct Heap* large, int k) {return (k & 1) ? top(small) : (((double)top(small) + top(large)) / 2);
}double* medianSlidingWindow(int* nums, int numsSize, int k, int* returnSize) {hashtable = NULL;struct Heap* small = malloc(sizeof(struct Heap));init(small, numsSize, cmp1);struct Heap* large = malloc(sizeof(struct Heap));init(large, numsSize, cmp2);for (int i = 0; i < k; ++i) {insert(small, large, nums[i]);}double* ans = malloc(sizeof(double) * (numsSize - k + 1));*returnSize = 0;ans[(*returnSize)++] = getMedian(small, large, k);for (int i = k; i < numsSize; ++i) {insert(small, large, nums[i]);erase(small, large, nums[i - k]);ans[(*returnSize)++] = getMedian(small, large, k);}return ans;
}

相关文章:

C语言 | Leetcode C语言题解之第480题滑动窗口中位数

题目&#xff1a; 题解&#xff1a; struct Heap {int* heap;int heapSize;int realSize;bool (*cmp)(int, int); };void init(struct Heap* obj, int n, bool (*cmp)(int, int)) {obj->heap malloc(sizeof(int) * (n 1));obj->heapSize 0;obj->cmp cmp; }bool c…...

LabVIEW开发如何实现降维打击

在LabVIEW开发中实现“降维打击”可以理解为利用软件优势和高效工具来解决复杂的问题&#xff0c;将多维度、多层次的技术简化为容易操作和管理的单一维度&#xff0c;达到出其不意的效果。以下是几种关键策略&#xff1a; 1. 模块化设计与封装 将复杂系统分解为若干模块&…...

docker 文件目录迁移

文章参考 du -hs /var/lib/docker/ 命令查看磁盘使用情况。 du -hs /var/lib/docker/docker system df命令&#xff0c;类似于Linux上的df命令&#xff0c;用于查看Docker的磁盘使用情况: rootnn0:~$ docker system df TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 7 2 122.2…...

Markdown 标题

Markdown 标题 Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成格式化的HTML代码。Markdown 的语法简洁明了,广泛用于撰写文档、博客文章、笔记等。本文将详细介绍 Markdown 的标题语法及其在文档中的应用。 Markdown 标题语法 在…...

【动手学电机驱动】TI InstaSPIN-FOC(5)Lab04 力矩控制

TI InstaSPIN-FOC&#xff08;1&#xff09;电机驱动和控制测试平台 TI InstaSPIN-FOC&#xff08;2&#xff09;Lab01 闪灯实验 TI InstaSPIN-FOC&#xff08;3&#xff09;Lab03a 测量电压电流漂移量 TI InstaSPIN-FOC&#xff08;4&#xff09;Lab02b 电机参数辨识 TI Insta…...

Mysql的CommunicationsException

一、报错内容 com.mysql.cj.jdbc.exceptions.CommunicationsException: The last packet successfully received from the server was 1,500,378 milliseconds ago. The last packet sent successfully to the server was 1,500,378 milliseconds ago. is longer than the s…...

C++学习笔记----9、发现继承的技巧(二)---- 重用目的的继承

现在你对继承的基本语法已经比较熟悉了&#xff0c;是时候探索继承是c语言中重要属性的一个主要原因了。继承是一个装备允许你平衡既有代码。本节会举出基于代码重用目的的继承的例子。 1、WeatherPrediction类 假想你有一个任务&#xff0c;写一个程序来发出简单的天气预报&a…...

锐评 Nodejs 设计模式 - 创建与结构型

本系列文章的思想&#xff0c;都融入了 让 Java 再次伟大 这个全新设计的脚手架产品中&#xff0c;欢迎大家使用。 单例模式与模块系统 Node 的单例模式既特殊又简单——凡是从模块中导出的实例天生就是单例。 // database.js function Database(connect, account, password)…...

【RoadRunner】自动驾驶模拟3D场景构建 | 软件简介与视角控制

&#x1f4af; 欢迎光临清流君的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落 &#x1f4af; &#x1f525; 个人主页:【清流君】&#x1f525; &#x1f4da; 系列专栏: 运动控制 | 决策规划 | 机器人数值优化 &#x1f4da; &#x1f31f;始终保持好奇心&…...

15分钟学Go 第4天:Go的基本语法

第4天&#xff1a;基本语法 在这一部分&#xff0c;将讨论Go语言的基本语法&#xff0c;了解其程序结构和基础语句。这将为我们后续的学习打下坚实的基础。 1. Go语言程序结构 Go语言程序的结构相对简单&#xff0c;主要包括&#xff1a; 包声明导入语句函数语句 1.1 包声…...

【Qt】Qt的介绍——Qt的概念、使用Qt Creator新建项目、运行Qt项目、纯代码方式、可视化操作、认识对象模型(对象树)

文章目录 Qt1. Qt的概念2. 使用Qt Creator新建项目3. 运行Qt项目3.1 纯代码方式实现3.2 可视化操作实现 4. 认识对象模型&#xff08;对象树&#xff09; Qt 1. Qt的概念 Qt 是一个跨平台的 C 图形用户界面应用程序开发框架。它是软件开发者提供的用于界面开发的程序框架&#…...

论文笔记:PTR: Prompt Tuning with Rules for Text Classification

Abstract 手动设计大量语言提示麻烦且易出错&#xff0c;而自动生成的提示&#xff0c;在非小样本场景下验证其有效性昂贵且耗时。因此&#xff0c;提示调优以处理多类别分类任务仍然具有挑战。为此&#xff0c;本文提出使用规则进行多类别文本分类提示调优&#xff08;PTR&…...

服务器和中转机协同工作以提高网络安全

服务器和中转机&#xff08;代理服务器&#xff09;可以通过多种方式协同工作来提高网络安全。 常见的协同工作策略&#xff1a; 1. 使用代理服务器作为安全网关 访问控制&#xff1a;代理服务器可以作为网络的入口点&#xff0c;实施访问控制策略&#xff0c;如基于IP地址、…...

Java利用itextpdf实现pdf文件生成

前言 最近公司让写一个数据页面生成pdf的功能&#xff0c;找了一些市面代码感觉都太麻烦&#xff0c;就自己综合性整合了一个便捷的工具类&#xff0c;开发只需简单组装数据直接调用即可快速生成pdf文件。望大家一起学习&#xff01;&#xff01;&#xff01; 代码获取方式&am…...

2010年国赛高教杯数学建模C题输油管的布置解题全过程文档及程序

2010年国赛高教杯数学建模 C题 输油管的布置 某油田计划在铁路线一侧建造两家炼油厂&#xff0c;同时在铁路线上增建一个车站&#xff0c;用来运送成品油。由于这种模式具有一定的普遍性&#xff0c;油田设计院希望建立管线建设费用最省的一般数学模型与方法。   1. 针对两炼…...

datawhale大模型bot应用开发--task3:工作流

目录 一、介绍&#xff1a;Coze工作流 1.1工作流应用场景 1.2什么是工作流 1.3思考环节 二、各个工作流详情 2.1情感分类工作流 2.2 随机数工作流 2.3 必应搜索工作流 2.4 天气查询工作流 三、集合上面五个工作流的总工作流 一、介绍&#xff1a;Coze工作流 1.1工作…...

期货配资系统风控逻辑开发/完整源代码

期货配资系统风控逻辑的开发是确保系统安全、稳定、高效运行的关键环节。以下是对期货配资系统风控逻辑开发的详细分析&#xff1a; 一、风险识别与评估 风险来源分析&#xff1a; 市场风险&#xff1a;期货市场价格波动带来的风险。信用风险&#xff1a;投资者或配资方违约的…...

汽车免拆诊断案例 | 2023款零跑C01纯电车后备厢盖无法电动打开和关闭

故障现象  一辆2023款零跑C01纯电车&#xff0c;累计行驶里程约为2万km&#xff0c;车主进厂反映&#xff0c;后备厢盖无法电动打开和关闭。 故障诊断  接车后试车&#xff0c;操作后备厢盖外侧、驾驶人侧及遥控钥匙上的后备厢盖开启按钮&#xff0c;可以听到后备厢盖解锁的…...

分布式存储架构 与分布式一致性协议

分布式存储架构可以分为无中心节点架构和有中心节点架构。它们的设计在系统中的角色分配、数据管理、协调方式等方面有所不同。 1. 无中心节点架构&#xff08;Decentralized/Peer-to-Peer Architecture&#xff09; 在无中心节点的分布式存储架构中&#xff0c;所有节点都是…...

Unity Apple Vision Pro 保姆级开发教程 - Simulator 模拟器使用

教程视频 Apple VisionPro Simulator 模拟器使用教程 VsionOS Simulator 简介 visionOS Simulator 是一个用于开发和测试 visionOS 应用程序的工具。它模拟 Apple Vision Pro 的运行环境&#xff0c;帮助开发者在没有硬件设备的情况下创建、调试和优化他们的应用程序。VisionO…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...