首页 > 编程语言 >贪心算法练习

贪心算法练习

时间:2024-01-20 11:11:23浏览次数:27  
标签:nums 练习 整数 算法 num str 字符串 排序 贪心

问题描述:设有n个正整数,将他们连接成一排,组成一个最大的多位整数。例如:n=4时,4个整数21, 8 , 901 , 6 连成的最大整数为:9018621。

贪心选择策略:

(1)将所有数字转化为字符串形式。

(2)将所有字符串按照长度从大到小排序。如果长度相同,则按照字典序从大到小排序。

(3)将排序后的字符串依次连接起来,得到最大的多位整数。

算法设计:

(1)将所有数字转化为字符串形式,存储在一个列表中。

(2)定义一个排序函数,按照字符串长度和字典序进行排序,使用排序函数对所有字符串进行排序。

(3)将排序后的字符串依次连接起来,得到最大的多位整数。

python代码实现:

 1 from filecmp import cmp
 2 def largest_number(nums):
 3 # 将所有数字转化为字符串形式
 4 str_nums = [str(num) for num in nums]
 5 # 定义一个排序函数,按照字符串长度和字典序进行排序
 6 def sort_func(s1, s2):
 7 if len(s1) != len(s2):
 8 return len(s2) - len(s1)
 9 else:
10 return cmp(s2, s1)
11 # 使用排序函数对所有字符串进行排序
12 sorted_str_nums = sorted(str_nums, key=lambda x: x, reverse=True)
13 # 将排序后的字符串依次连接起来,得到最大的多位整数
14 largest_num_str = ''.join(sorted_str_nums)
15 return largest_num_str
16 
17 nums = []
18 n = int(input("请输入整数的个数:"))
19 for i in range(n):
20 num = int(input("请输入第{}个整数:".format(i+1)))
21 nums.append(num)
22 print(largest_number(nums))

结果输出:

标签:nums,练习,整数,算法,num,str,字符串,排序,贪心
From: https://www.cnblogs.com/doris510/p/17976170

相关文章

  • 算法模板 v1.3.1.20240120
    算法模板v1.1.1.20240115:之前的历史版本已经不可寻,创建了第一份算法模板。v1.2.1.20240116:删除“编译”-“手动开栈”与“编译”-“手动开O优化”;将“编译”-“CF模板”中的第20行代码cin>>T;注释;删除“读写”及其目录下的内容;删除“图论”-“欧拉图”-“混合图”;删除“图论”-......
  • PacBio长read纠错算法的研究
    PacBio长read纠错算法的研究随着第三代测序技术的快速发展,长read测序技术的出现使得我们可以更好地理解基因组的结构和功能。PacBio是一种常用的长read测序技术,但是由于其测序错误率较高,需要进行纠错以提高准确性。本文将介绍PacBio长read纠错算法的研究进展。PacBio长read纠错......
  • 图论练习笔记
    P1606[USACO07FEB]LilypadPondG首先跳的过程肯定不会经过相同位置,所以之前经过的位置可以视为原状态,所以可以把添加的莲花数量视为当前路径长度,问题也就转化成了最短路计数。因为求的是添加莲花的方案数而不是经过路径的方案数,所以可以把已有的莲花连通块缩起来,以水格子为状......
  • 2024/1/19 算法笔记
    题目1:最大公约数的延伸问题P1414又是毕业季II-洛谷|计算机科学教育新生态(luogu.com.cn)题目上提及了最大公约数,但是解答却没有直接使用最大公约数doge题目意思是给定n个数,再给定一个k,往这n个数中取k个,求这k个数的最大公约数是多少?然后题目的要求是k的取值为1到n全部取......
  • $20240119$ 练习题解
    \(20240119\)练习题解CF472D通过尝试我们容易发现,与点\(1\)最近的点一定是直接儿子。我们要是把它作为突破点,那就成功了一半了。假设点\(2\)与点\(1\)最近,又假设我们可以用函数\(F(x)\)来确定\(x\)点的子树形态。那我们会发现如果我们还有剩余的节点,那么剩余的节点......
  • 吴师兄学算法day08 贪心 605. 种花问题
    题目:605.种花问题易错点:没想出来,借鉴了灵山的代码的思路,强行种花。我喜欢这个思路。感觉有点像设置哨兵那样的。 我的代码:classSolution:defcanPlaceFlowers(self,flowerbed:List[int],n:int)->bool:#修改数组,每次都种花,#凑够3个0......
  • 吴师兄学算法day08 贪心 860. 柠檬水找零
    题目:860.柠檬水找零易错点:我写的是ifesle哈哈,第一次还写错了。i==20的时候,5元只找了1张。哈哈哈.应该找3张 我的代码:classSolution:deflemonadeChange(self,bills:List[int])->bool:dic={5:0,10:0,20:0}foriinbills:......
  • MD4(SHA-1,SM3)算法的实现
     一、实验目的深度理解MD4(SHA-1,SM3)算法的工作原理,理解单向散列函数的应用,体会区块链挖矿的难度系数、加深对单向散列函数性质的理解。二、实验器材pycharm+python3.11三、实验内容1.实验要求:自己配置python环境,编写MD4(SHA-1,SM3)算法实现程序,运行MD4(SHA-1,SM3)程序,演......
  • 吴师兄学算法day08 贪心 134. 加油站
    题目:134.加油站理解难点:理解比较难,就是遍历1遍,尽可能找局部满足要求的。如果总油耗满足要求。那局部油耗找的出发点就是对的。遍历的时候,因为答案唯一,要么就满足要求,要么不满足要求。而<0证明之前的都不满足要求,满足要求的一定在后面。这题还是个环,环这里有点没太理解。环......
  • CVE-2012-1823复现练习
    环境搭建:DockerDesktop开启cd/CVE-2012-1823docker-composeup-d本地访问80端口分析PHP-CGI直接将用户的请求作为了PHP-CGI的参数执行,导致远程代码的执行。先上执行结果PHP的运行模式:CGI通用网关接口,接收网页浏览器的数据发送给web服务器,再把执行结果返回给浏览器参......