python算法例15 合并数字

1. 问题描述

给出n个数,将这n个数合并成一个数,每次只能选择两个数a、b合并,合并需要消耗的能量为a+b,输出将n个数合并成一个数后消耗的最小能量。

2. 问题示例

给出[1,2,3,4],返回19,即选择1、2合并,消耗3能量;

现在为[3,4,3],选择3、3合并,消耗6;

现在为[6,4],剩下两个数合并,消耗10,一共消耗19。

给出[2,8,4,1],返回25,即选择1、2合并,消耗3能量;

现在为[8,4,3],选择3、4合并,消耗7,

现在为[7,8],剩下两个数合并,消耗15,一共消耗25能量。

3. 代码实现

这是一个典型的贪心算法问题,可以通过使用最小堆(Min Heap)来实现。

import heapqdef mergeNumbers(nums):# 将所有数加入最小堆中heap = []for num in nums:heapq.heappush(heap, num)# 依次合并数,计算最小能量消耗total_energy = 0while len(heap) > 1:a = heapq.heappop(heap)b = heapq.heappop(heap)energy = a + btotal_energy += energyheapq.heappush(heap, energy)return total_energy# 测试示例
print(mergeNumbers([1, 2, 3, 4]))     # 输出 19
print(mergeNumbers([2, 8, 4, 1]))     # 输出 25

首先将所有的数字添加到最小堆中。

然后,我们依次从最小堆中取出两个最小的数a和b,合并它们并计算能量消耗。

将合并后的结果再次放回最小堆中,然后重复这个过程,直到最小堆中只剩下一个数为止。

最终,返回计算得到的总能量消耗。

import heapqdef mergeNumbers(nums):# 将所有数转换为最小堆heapq.heapify(nums)total_energy = 0while len(nums) > 1:# 从最小堆中取出两个数a = heapq.heappop(nums)b = heapq.heappop(nums)energy = a + btotal_energy += energy# 将合并后的数放回最小堆heapq.heappush(nums, energy)return total_energy# 测试示例
print(mergeNumbers([1, 2, 3, 4]))  # 输出 19
print(mergeNumbers([2, 8, 4, 1]))  # 输出 25

首先将输入的数字列表转换为最小堆。

然后,我们循环地从最小堆中取出两个最小的数a和b,合并它们并计算能量消耗,然后将合并后的结果再次放回最小堆中。

重复这个过程直到最小堆中只剩下一个数为止,并返回计算得到的总能量消耗。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/192690.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【作业】操作系统实验一:进程和线程

文章目录 实验内容一、进程的创建1、编辑源程序2、编辑结果3、编译和运行程序4、解释运行结果 二、进程共享1、运行2、解释运行结果 三、进程终止1、运行2、解释运行结果 四、进程同步1、运行2、解释运行结果 五、Linux中子进程映像的重新装入1、运行2、解释运行结果 六、线程1…

多因素方差分析(Multi-way Analysis of Variance) R实现

1, data0507 flower 是某种植物在两个海拔和两个气温下的开花高度,采用合适 的统计方法,检验该种植物的开花高度在不同的海拔之间和不同的气温之间有无差异?如果有差异,具体如何差异的?(说明依据、结论等关…

GSVA,GSEA,KEGG,GO学习

目录 GSVA 1:获取注释基因集 2:运行 GSEA 1,示例数据集 2,运行 GSEA_KEGG富集分析 GSEA_GO富集分析 DO数据库GSEA MSigDB数据库选取GSEA KEGG 1:运行 2:绘图 bar图 气泡图 绘图美化 GO GSVA 1:获取注…

【网络通信】探索UDP与TCP协议、IP地址和端口号的奥妙

🌺个人主页:Dawn黎明开始 🎀系列专栏:网络奇幻之旅 ⭐每日一句:往前走,朝着光 📢欢迎大家:关注🔍点赞👍评论📝收藏⭐️ 文章目录 📋前…

4.2 Windows驱动开发:内核中进程线程与模块

内核进程线程和模块是操作系统内核中非常重要的概念。它们是操作系统的核心部分,用于管理系统资源和处理系统请求。在驱动安全开发中,理解内核进程线程和模块的概念对于编写安全的内核驱动程序至关重要。 内核进程是在操作系统内核中运行的程序。每个进…

可燃气体监测仪|燃气管网监测解决办法

可燃气体监测仪是城市生命线中,燃气监测运行系统的前端监测设备,其主要作用是对燃气管网的安全状况进行实时监测。燃气管道在使用过程中,由于老化、裂纹、锈蚀等问题,容易导致燃气出现泄漏问题,从而引发一系列的安全事…

MySQL/Oracle用逗号分割的id怎么实现in (逗号分割的id字符串)。find_in_set(`id`, ‘1,2,3‘) 函数,

1.MySQL 1.1.正确写法 select * from student where find_in_set(s_id, 1,2,3); 1.2.错误示范 select * from student where find_in_set(s_id, 1,2 ,3); -- 注意,中间不能有空格。1、3 select * from student where find_in_set(s_id, 1,2, 3); -- 注意…

leetcode系列(双语)003——GO无重复字符的最长子串

文章目录 003、Longest Substring Without Repeating Characters个人解题官方解题扩展 003、Longest Substring Without Repeating Characters 无重复字符的最长子串 Given a string s, find the length of the longest substring without repeating characters. 给定一个字符…

解决:ERROR: No matching distribution found for PIL

解决:ERROR: No matching distribution found for PIL 背景 在搭建之前的代码环境时,报错: ERROR: Could not find a wersion that satisfies the requirement PIL(from versions: none) ERROR: No matching distribu…

wpf devexpress 创建布局

模板解决方案 例子是一个演示连接数据库连接程序。打开RegistrationForm.BaseProject项目和如下步骤 RegistrationForm.Lesson1 项目包含结果 审查Form设计 使用LayoutControl套件创建混合控件和布局 LayoutControl套件包含三个主控件: LayoutControl - 根布局…

【机器学习算法】机器学习:支持向量机(SVM)

转载自: 【精选】机器学习:支持向量机(SVM)-CSDN博客 1.概述 1.1,概念 支持向量机(SVM)是一类按监督学习方式对数据进行二元分类的广义线性分类器,其决策边界是对学习样本求解的最…

WordPress主题WoodMart v7.3.2 WooCommerce主题和谐汉化版下载

WordPress主题WoodMart v7.3.2 WooCommerce主题和谐汉化版下载 WoodMart是一款出色的WooCommerce商店主题,它不仅提供强大的电子商务功能,还与流行的Elementor页面编辑器插件完美兼容。 主题文件在WoodMart Theme/woodmart.7.3.2.zip,核心在P…

公共字段自动填充-Mybatis Plus实现

简历描述 使用ThreadLocal动态获取当前登录用户,从而解决MybatisPlus公共字段自动填充问题。达到简化编码的目的,使业务方法更加简洁。 问题分析 前面我们已经完成了后台系统的员工管理功能的开发,在新增员工时需要设置创建时间、创建人、…

每天一点python——day69

#字符串的比较操作使用的符号&#xff1a; >[大于]&#xff0c;>[大于等于]&#xff0c;<[小于]&#xff0c;<[小于等于]&#xff0c;[等于]&#xff0c;![不等于]#如图&#xff1a; #例子&#xff1a;比较原理释义&#xff1a;每个字符在计算机里面都有一个原始值…

基于STM32的多组外部中断(EXTI)的优化策略与应用

在某些嵌入式应用中&#xff0c;可能需要同时处理多个外部中断事件。STM32系列微控制器提供了多组外部中断线&#xff08;EXTI Line&#xff09;&#xff0c;可以同时配置和使用多个GPIO引脚作为外部中断触发器。为了有效管理和处理多组外部中断&#xff0c;我们可以采取一些优…

【c++】——类和对象(中)——实现完整的日期类(优化)万字详细解疑答惑

作者:chlorine 专栏:c专栏 赋值运算符重载()()():实现完整的日期类(上) 我走的很慢&#xff0c;但我从不后退。 【学习目标】 日期(- - --)天数重载运算符 日期-日期 返回天数 对日期类函数进行优化(不符合常理的日期&#xff0c;负数&#xff0c;const成员)c中重载输入cin和输…

python趣味编程-5分钟实现一个益智数独游戏(含源码、步骤讲解)

Puzzle Game In Python是用 Python 编程语言Puzzle Game Code In Python编写的,有一个 4*4 的棋盘,有 15 个数字。然后将数字随机洗牌。 在本教程中,我将教您如何使用Python 创建记忆谜题游戏。 Python Puzzle Game游戏需要遵循以下步骤,首先是将图块数量移动到空的图块空…

机器视觉系统选型-定光照强度

同一个外形结构的光源&#xff0c;光照强度受如下影响&#xff1a; 单颗灯珠的亮度灯珠排列的数量和密度漫射板/防护板的材质&#xff08;透明、半透明、全漫射&#xff09; 在合理范围内提升光照强度&#xff0c;可降低对相机曝光时长的要求 外形结构尺寸相同的两款光源&am…

uni-app(1)pages. json和tabBar

第一步 在HBuilderX中新建项目 填写项目名称、确定目录、选择模板、选择Vue版本&#xff1a;3、点击创建 第二步 配置pages.json文件 pages.json是一个非常重要的配置文件&#xff0c;它用于配置小程序的页面路径、窗口表现、导航条样式等信息。 右键点击pages&#xff0c;按…

【C++入门到精通】右值引用 | 完美转发 C++11 [ C++入门 ]

阅读导航 引言一、左值引用和右值引用1. 什么是左值&#xff1f;什么是左值引用&#xff1f;2. 什么是右值&#xff1f;什么是右值引用&#xff1f;3. move( )函数 二、左值引用与右值引用比较三、右值引用使用场景和意义四、完美转发std::forward 函数完美转发实际中的使用场景…