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

【编程题】7-5 堆中的路径

7-5 堆中的路径

  • 1 题目原文
  • 2 思路解析
  • 3 代码实现

1 题目原文

题目链接:7-5 堆中的路径

将一系列给定数字插入一个初始为空的最小堆 h h h。随后对任意给定的下标 i i i,打印从第 i i i 个结点到根结点的路径。

输入格式:

每组测试第 1 1 1 行包含 2 2 2 个正整数 n n n m ( ≤ 1 0 3 ) m (≤10^3) m(103),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间 [ − 1 0 4 , 1 0 4 ] [−10^4,10^4 ] [104,104] 内的 n n n 个要被插入一个初始为空的小顶堆的整数。最后一行给出 m m m 个下标。

输出格式:

对输入中给出的每个下标 i i i,在一行中输出从第 i i i 个结点到根结点的路径上的数据。数字间以 1 1 1 个空格分隔,行末不得有多余空格。

输入样例:

5 3
46 23 26 24 10
5 4 3

输出样例:

24 23 10
46 23 10
26 10

2 思路解析

    此题考查最小堆。
        1. 定义最小优先队列 pq
        2. 按照题目要求,遍历所给数组,依次将元素加入 pq,操作完之后即获得了一个最小堆;
        3. 根据所给下标,从下往上依次遍历输出堆中的元素,直到根结点,即堆中的路径,注意题目中的下标和自定义的堆中的下标。
    堆和优先队列可以参考这篇文章,这里不再赘述其原理和实现过程,只给出代码实现(应用)。

3 代码实现

#include <stdio.h>
#include <stdlib.h>int* create_heap(int n) {int* res = (int*)malloc(n * sizeof(int));return res;
}/** 此题中只需要入队,所以只实现上浮操作即可 **/
void adjust_up_heap(int* heap, int n) {int t = heap[n], i = (n - 1) >> 1;while (i >= 0 && t < heap[i]) {heap[n] = heap[i];n = i;i = (i - 1) >> 1;}heap[n] = t;
}int* find_path_to_root(int* heap, int i, int* n) {int* res = (int*)malloc(*n * sizeof(int));int j = i, p = 0;while (j >= 0) {res[p++] = heap[j];j = (j - 1) >> 1;}res = (int*)realloc(res, p * sizeof(int));*n = p;return res;
}void destroy_arr(int* arr) { free(arr); }int main(void) {int n = 0, m = 0, i = 0, j = 0, k = 0;scanf("%d%d", &n, &m);int* heap = create_heap(n);for (i = 0; i < n; i++) {scanf("%d", heap + i);adjust_up_heap(heap, i);}while (m--) {scanf("%d", &i);k = n;int* r = find_path_to_root(heap, i - 1, &k);printf("%d", r[0]);for (j = 1; j < k; j++) {printf(" %d", r[j]);}printf("\n");destroy_arr(r);}destroy_arr(heap);return 0;
}

注意题目的下标是从 1 1 1 开始的,代码中的堆的下标是从 0 0 0 开始的。

相关文章:

【编程题】7-5 堆中的路径

7-5 堆中的路径 1 题目原文2 思路解析3 代码实现 1 题目原文 题目链接&#xff1a;7-5 堆中的路径 将一系列给定数字插入一个初始为空的最小堆 h h h。随后对任意给定的下标 i i i&#xff0c;打印从第 i i i 个结点到根结点的路径。 输入格式: 每组测试第 1 1 1 行包含 …...

Scala 中的访问修饰符

在Scala中&#xff0c;面向对象的权限控制主要通过访问修饰符来实现。Scala提供了以下几种访问修饰符来控制类、对象、成员变量和方法的访问权限&#xff1a; 1. 默认访问权限&#xff08;无修饰符&#xff09; 如果没有指定任何访问修饰符&#xff0c;成员默认是public的&…...

flask_restx 定义任意类型参数

之前定义的content只是string&#xff0c;现在需要支持即可以string也可以list from flask_restx import fieldsclass Messages:def get_model(api):return api.model("Message",{"role": fields.String(requiredTrue, description"The role of messa…...

Unity3D网格简化与LOD技术详解

前言 在Unity3D游戏开发中&#xff0c;网格简化&#xff08;Mesh Simplification&#xff09;和细节层次&#xff08;Level of Detail, LOD&#xff09;技术是优化渲染性能的关键手段&#xff0c;尤其在处理复杂场景和高精度模型时至关重要。这两种技术通过减少模型的几何复杂…...

爬取数据时如何处理可能出现的异常?

在爬取数据时&#xff0c;处理可能出现的异常是确保爬虫稳定运行的关键。以下是一些常见的异常处理策略和具体实现方法&#xff0c;这些方法可以帮助你在爬虫开发中更有效地应对各种问题。 1. 使用 try-catch 块捕获异常 在PHP中&#xff0c;try-catch 块是处理异常的基本工具…...

TCP/IP原理详细解析

前言 TCP/IP是一种面向连接&#xff0c;可靠的传输&#xff0c;传输数据大小无限制的。通常情况下&#xff0c;系统与系统之间的http连接需要三次握手和四次挥手&#xff0c;这个执行过程会产生等待时间。这方面在日常开发时需要注意一下。 TCP/IP 是互联网的核心协议族&…...

MPPT与PWM充电原理及区别详解

MPPT&#xff08;最大功率点跟踪&#xff09;和PWM&#xff08;脉宽调制&#xff09;是太阳能充电控制器中常用的两种技术&#xff0c;它们在原理、效率和适用场景上有显著区别。以下是两者的详细对比&#xff1a; 1. 工作原理 PWM&#xff08;脉宽调制&#xff09; 核心机制…...

数据量过大的时候导出数据很慢

原因解析 速度慢无非两个原因: sql取数很慢程序很慢 sql很慢有3种原因: sql本身查询不合理,需要优化数据库没有索引多次频繁访问数据,造成了不必要的开销 取消多次获取数据,一次获取 框定一个大致的范围,获取此次查询的所有数据使用map设置数据,没有主键使用傅和主键拼接数据 /…...

NVIDIA k8s-device-plugin源码分析与安装部署

在《kubernetes Device Plugin原理与源码分析》一文中&#xff0c;我们从源码层面了解了kubelet侧关于device plugin逻辑的实现逻辑&#xff0c;本文以nvidia管理GPU的开源github项目k8s-device-plugin为例&#xff0c;来看看设备插件侧的实现示例。 一、Kubernetes Device Pl…...

langChainv0.3学习笔记(初级篇)

LangChain自0.1版本发布以来&#xff0c;已经历了显著的进化&#xff0c;特别是向AI时代的适应性提升。在0.1版本中&#xff0c;LangChain主要聚焦于提供基本的链式操作和工具集成&#xff0c;帮助开发者构建简单的语言模型应用。该版本适用于处理简单任务&#xff0c;但在应对…...

聚焦两会:科技与发展并进,赛逸展2025成创新新舞台

在十四届全国人大三次会议和全国政协十四届三次会议期间&#xff0c;代表委员们围绕多个关键议题展开深入讨论&#xff0c;为国家未来发展谋篇布局。其中&#xff0c;技术竞争加剧与经济转型需求成为两会焦点&#xff0c;将在首都北京举办的2025第七届亚洲消费电子技术贸易展&a…...

Xilinx ZYNQ FSBL解读:LoadBootImage()

篇首 最近突发奇想&#xff0c;Xilinx 的集成开发环境已经很好了&#xff0c;很多必要的代码都直接生成了&#xff0c;这给开发者带来了巨大便利的同时&#xff0c;也让人错过了很多代码的精彩&#xff0c;可能有很多人用了很多年了&#xff0c;都还无法清楚的理解其中过程。博…...

flutter的HTTP headers用法介绍

flutter的HTTP headers用法介绍 在 Flutter 中&#xff0c;HTTP headers 是用于在发送 HTTP 请求时传递额外信息的关键部分。它们可以用于身份验证、缓存控制、内容类型声明等。以下是关于 Flutter 中 HTTP headers 的详细说明和用法。 1. 什么是 HTTP Headers&#xff1f; H…...

Flutter开发避坑指南:高频问题排查与性能调优实战

目录 一、使用中常见问题 1.环境与配置问题 2.Widget 重建与状态管理 3.布局与绘制问题 4.动画与卡顿&#xff08;Jank&#xff09;问题 5.平台相关问题 二、Flutter实战14问 1.如何使用 Flutter 进行多语言支持&#xff1f; 1. 添加依赖 2. 配置 Material App 3. 创…...

Uniapp实现地图获取定位功能

摘要&#xff1a;本文将手把手教你如何在Uniapp项目中集成地图功能、实现定位获取&#xff0c;并解决微信小程序、APP、H5三端的兼容性问题&#x1f680;&#x1f680;&#x1f680; 一、环境准备 地图平台选择 微信小程序&#xff1a;腾讯地图&#xff08;强制使用&#xff09…...

Ubuntu 24.04 安装与配置 JetBrains Toolbox 指南

&#x1f4cc; 1. JetBrains Toolbox 介绍 JetBrains Toolbox 是 JetBrains 开发的工具管理器&#xff0c;可用于安装、更新和管理 IntelliJ IDEA、PyCharm、WebStorm、CLion 等。本指南记录了 JetBrains Toolbox 在 Ubuntu 24.04 上的 安装、路径调整、权限管理 及 遇到的问题…...

【AI】神经网络|机器学习——图解Transformer(完整版)

Transformer是一种基于注意力机制的序列模型,最初由Google的研究团队提出并应用于机器翻译任务。与传统的循环神经网络(RNN)和卷积神经网络(CNN)不同,Transformer仅使用自注意力机制(self-attention)来处理输入序列和输出序列,因此可以并行计算,极大地提高了计算效率…...

【VUE2】第二期——生命周期及工程化

目录 1 生命周期 1.1 介绍 1.2 钩子 2 可视化图表库 3 脚手架Vue CLI 3.1 使用步骤 3.2 项目目录介绍 3.3 main.js入口文件代码介绍 4 组件化开发 4.1 组件 4.2 普通组件注册 4.2.1 局部注册 4.2.2 全局注册 1 生命周期 1.1 介绍 Vue生命周期&#xff1a;就是…...

贪心算法三

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;了解什么是贪心算法&#xff0c;并且掌握贪心算法。 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会坚持。早安! >…...

猫耳大型活动提效——组件低代码化

1. 引言 猫耳前端在开发活动的过程中&#xff0c;经历过传统的 pro code 阶段&#xff0c;即活动页面完全由前端开发编码实现&#xff0c;直到 2020 年接入公司内部的低代码活动平台&#xff0c;满足了大部分日常活动的需求&#xff0c;运营可自主配置活动并上线&#xff0c;释…...

机器学习 Day02,matplotlib库绘图

1.matplotlib图像结构 容器层&#xff1a;画板&#xff0c;画布&#xff0c;坐标系辅助层&#xff1a;刻度&#xff0c;标题&#xff0c;网格&#xff0c;图例等图像层&#xff1a;折线图&#xff08;主讲&#xff09;&#xff0c;饼图&#xff0c;直方图&#xff0c;柱状图等…...

MySQL中有哪几种锁?

大家好&#xff0c;我是锋哥。今天分享关于【MySQL中有哪几种锁&#xff1f;】面试题。希望对大家有帮助&#xff1b; MySQL中有哪几种锁&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 MySQL 中&#xff0c;锁是用于确保数据的一致性和并发控制的机…...

Unity单例模式更新金币数据

单例模式&#xff08;Singleton Pattern&#xff09;是一种创建型设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取该实例。在游戏开发中&#xff0c;单例模式非常适合用于管理全局唯一的数据&#xff0c;比如玩家的金币数量。通过使用单例…...

【javaEE】多线程(进阶)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…...

python从入门到精通(二十四):python爬虫实现登录功能

这里写目录标题 requests实现登录功能selenium实现登录功能 requests实现登录功能 使用 requests 库结合会话&#xff08;Session&#xff09;来尝试登录。不过豆瓣有反爬虫机制&#xff0c;这种方式可能会受到验证码等因素的限制 import requests import re# 豆瓣登录页面 l…...

Flask Jinja语法总结篇

目录 1️⃣ 变量(Variables) 2️⃣ 条件语句(if 语句) 3️⃣ 循环(for 语句) 4️⃣ 过滤器(Filters) 5️⃣ 宏(Macros,类似于函数) 6️⃣ 模板继承(Template Inheritance) 7️⃣ 包含模板(Include) 8️⃣ Flask 结合 Jinja 总结 Jinja 是 Flask 默认使…...

Vue3实战学习(Element-Plus常用组件的使用(输入框、下拉框、单选框多选框、el-image图片))(上)(5)

目录 一、Vue3工程环境配置、项目基础脚手架搭建、Vue3基础语法、Vue3集成Element-Plus的详细教程。(博客链接如下) 二、Element-Plus常用组件使用。 &#xff08;1&#xff09;el-input。(input输入框) <1>正常状态的el-input。 <2>el-input的disable状态。 <3…...

C++ 链表List使用与实现:拷贝交换与高效迭代器细致讲解

目录 list的使用&#xff1a; 构造与赋值 元素访问 修改操作 容量查询 链表特有操作 拼接&#xff08;Splice&#xff09; C11 新增方法 注意&#xff1a; stl_list的模拟实现&#xff1a; 一、链表节点设计的艺术 1.1 结构体 vs 类的选择 二、迭代器实现的精髓 2…...

安当TDE透明加密技术:为Manus大模型构建用户会话数据保护的“安全金库”

摘要 在人工智能技术深度落地的今天&#xff0c;大模型开发者面临的核心挑战已从算法优化转向数据安全。作为垂直领域大模型的代表&#xff0c;Manus凭借其强大的语义理解与个性化交互能力&#xff0c;在金融、医疗、教育等行业获得广泛应用。然而&#xff0c;其海量的用户会话…...

知乎后台管理系统:数据库系统原理实验1——数据库基础概念

实验背景 通过练习绘制语义网络&#xff0c;加深对于基本概念之间关系的理解和掌握。掌握在VISIO中绘制能准确表达基本概念之间关系的语义网络的技能。了解并比较数据模型的Chen’s表示法和UML表示法。理解关系模型设计中的完整性约束的重要性。掌握在Linux操作系统下远程访问…...