利用合理的分配策略解决LeetCode第3301题高度互不相同的最大塔高和问题

3301.高度互不相同的最大塔高和

难度:中等

问题描述:

给你一个数组maximumHeight,其中maximumHeight[i]表示第i座塔可以达到的最大高度。

你的任务是给每一座塔分别设置一个高度,使得:

第i座塔的高度是一个正整数,且不超过maximumHeight[i]。

所有塔的高度互不相同。

请你返回设置完所有塔的高度后,可以达到的最大总高度。如果没有合法的设置,返回-1。

示例1:

输入:maximumHeight=[2,3,4,3]

输出:10

解释:

我们可以将塔的高度设置为:[1,2,4,3]。

示例2:

输入:maximumHeight=[15,10]

输出:25

解释:

我们可以将塔的高度设置为:[15,10]。

示例3:

输入:maximumHeight=[2,2,1]

输出:-1

解释:

无法设置塔的高度为正整数且高度互不相同。

提示:

1<=maximumHeight.length<=105

1<=maximumHeight[i]<=109

问题分析:

根据题目的描述,maximumHeight数组中的元素是每一座塔可以达到的最大高度,而要让你给每一座塔设置一个高度,以获得最大总高度。这是一个分配策略的问题,要让总高度最大,那么就尽量给每一座塔分配一个尽可能大的高度。根据题目的分配原则,可以采用以下的分配策略:

  1. 先找到maximumHeight数组中所有塔中可能达到的最大高度的最大值,然后分配给这座塔。
  2. 将已经分配了高度的塔从maximumHeight中去除。如果有最大高度相同的塔,为了保证所有塔高互不相同,在处理第二座可能达到的最大高度相同的塔时,其最大高度只能取其可能达到的最大高度减1。
  3. 重复1、2步操作,直到所有的塔都分配了最大高度为止。
  4. 将所有分配了的最大塔高和输出,即是问题的解答。

程序如下:

python 复制代码
#输入原始数据
maximumHeight=eval(input('pls input maximumHeight='))

#列表a用于保存每次设置的最大塔高
a=[]

#cn为当前已经使用的最大塔高
cn=max(maximumHeight)
a.append(cn)
maximumHeight.pop(maximumHeight.index(cn))
while len(maximumHeight)>0:
    m=max(maximumHeight)
    if m<cn:
        a.append(m)
        maximumHeight.pop(maximumHeight.index(m))
        cn=m
    else:
        a.append(m-1)
        maximumHeight.pop(maximumHeight.index(m))
        cn=m-1

#因为所有设置的塔高都为正整数,所以如果a中的最小值小于等于0,则设置不合格,输出-1,否则输出a中设置的最大塔高和
if min(a)<=0:
    print(-1)
else:
print(sum(a))

运行实例一

pls input maximumHeight=[2,3,4,2]

10

运行实例二

pls input maximumHeight=[3,4,7,4,6,5]

27

运行实例三

pls input maximumHeight=[2,2,1]

-1

感悟:

巧妙的算法使问题的解决丝丝入扣,让你体会那一种逻辑的严谨,思维的神奇。学习算法能培养良好的逻辑思维习惯。

相关推荐
IT猿手几秒前
最新高性能多目标优化算法:多目标麋鹿优化算法(MOEHO)求解GLSMOP1-GLSMOP9及工程应用---盘式制动器设计,提供完整MATLAB代码
开发语言·算法·机器学习·matlab·强化学习
阿七想学习5 分钟前
数据结构《排序》
java·数据结构·学习·算法·排序算法
幽络源小助理7 分钟前
Python使用requests_html库爬取掌阅书籍(附完整源码及使用说明)
python·html·python爬虫·爬虫教程·requests_html·爬取书籍·掌阅
取个名字真难呐9 分钟前
LossMaskMatrix损失函数掩码矩阵
python·深度学习·矩阵
南宫理的日知录10 分钟前
「Python数据科学」标量、向量、矩阵、张量与多维数组的辨析
python·numpy·数据科学
王老师青少年编程13 分钟前
gesp(二级)(12)洛谷:B3955:[GESP202403 二级] 小杨的日字矩阵
c++·算法·矩阵·gesp·csp·信奥赛
GZ同学27 分钟前
Arcgis中python工具箱制造要点及统计要素图层字段信息工具分享
python·arcgis
Kenneth風车1 小时前
【机器学习(九)】分类和回归任务-多层感知机(Multilayer Perceptron,MLP)算法-Sentosa_DSML社区版 (1)111
算法·机器学习·分类
eternal__day1 小时前
数据结构(哈希表(中)纯概念版)
java·数据结构·算法·哈希算法·推荐算法
北京_宏哥1 小时前
python接口自动化(四十二)- 项目架构设计之大结局(超详解)
python·架构·前端框架