贪心算法——最大整数问题详解

设有n个正整数,将他们连接成一排,组成一个最大的多位整数。 题目描述 设有n个正整数,将他们连接成一排,组成一个最大的多位整数。 如:n=3时,3个整数13,312,343,连成的最大整数为34331213。 如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613。 输入描述: 有多组测试样例,每组测试样例包含两行,第一行为一个整数N(N<=100),第二行包含N个数(每个数不超过1000,空格分开)。 输出描述: ... 阅读详情

贪心算法——最大整数问题详解:

[最大整数]设有n个正整数,将它们连接成一排,组成一个最大的多位整数。

例如:n=3时,3个整数13,312,343,连成的最大整数为34331213。

又如:n=4时,4个整数7,13,4,246,连成的最大整数为7424613。

输入:n

N个数

输出:连成的多位数

算法分析:此题很容易想到使用贪心法,在考试时有很多同学把整数按从大到小的顺序连接起来,测试题目的例子也都符合,但最后测试的结果却不全对。按这种标准,我们很容易找到反例:12,121应该组成12121而非12112,那么是不是相互包含的时候就从小到大呢?也不一定,如12,123就是12312而非12123,这种情况就有很多种了。是不是此题不能用贪心法呢?

其实此题可以用贪心法来求解,只是刚才的标准不对,正确的标准是:先把整数转换成字符串,然后在比较a+b和b+a,如果a+b>=b+a,就把a排在b的前面,反之则把a排在b的后面。

c++源代码:

#if 1
//贪心算法——最大整数
#include <iostream>
#include <string>
#include <vector>
#include <sstream>


using namespace std;
string str[3] = {""};




string GetStrFromInt(int n)
{
stringstream ss;
string s;
ss << n;
ss >> s;
return s;
}




string GreedyAlgorithm(int n)
{
int arr[4] = { 0 };
string strmax = "";
cout << "Please Input the Data:" << endl;
int m = n;
while (m--)
{
if (!(cin >> arr[m]))
{
cout << "输入数据不合法" << endl;
return NULL;
}
}


//核心算法———将整数转为字符串,连接起来进行比较
for (int i = 0; i < n; ++i)
{
str[i] = GetStrFromInt(arr[i]);
}



for (int i = 0; i < n; ++i)
{
for (int j = i + 1; j < n; ++j)
{
if ((str[i]+str[j]).compare(str[j] + str[i]) < 0)
{
string temp=str[i];
str[i] = str[j];
str[j] = temp;
}
}
}
for (int i = 0; i < n; ++i)
{
strmax += str[i];
}
return strmax;
}






int main()
{
int n;
cout << "Please Input Datas:" << endl;
if (cin >> n)
cout << GreedyAlgorithm(n) << endl;
else
cout << "输入数据不合法" << endl;
return 0;
}
#endif


【贪心经典题目】最大整数-(c++详解) 设有n(n≤20)个正整数(每个在int范围内),将它们连接成一排,组成一个最大的多位整数。例如n=3,3个整数分别是13、312和343,连接成最大的整数为34331213。即:若大小不同,则比较是否前一部分完全相同,如果是,则可以比较短字符串的首位和长字符串的短字符串长度+1位即可。否则按照正常情况排序。当我第一眼看到这个题目的时候,我第一反应就是直接排序字符串,因为首字母大的字符串肯定要排在前面,所以,直接按字典序sort.一行,一个数,表示连接成的最大整数。第二行为n个正整数,分别用空格分隔。 阅读详情

相关推荐

设有n个正整数,将他们连接成一排,组成一个最大的多位整数(Python)

题目描述 设有n个正整数,将他们连接成一排,组成一个最大的多位整数。 如:n=3时,3个整数13,312,343,连成的最大整数为34331213。 如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613。   输入描述: 有多组测试样例,每组测试样例包含两行,第一行为一个整数N(N&lt;=100),第二行包含N个数(每个数不超过1000,空格分开)。   ...

懒骨头707 7388

拼数(最大整数)

拼数(最大整数)

panpanpan17452的博客 1059

贪心算法实战:构造数位和最小的正整数(Python/C++实现)

贪心算法是一种在每一步选择中都采取当前最优解的算法思想,其核心原理是通过局部最优选择来达到全局最优解。在算法设计与优化中,贪心策略因其高效性和简洁性而被广泛应用,特别适合解决最优化问题。数位构造是贪心算法的典型应用场景,通过合理分配数字位数和数值大小,可以高效解决数字组合优化问题。以构造数位和等于n的最小正整数为例,贪心算法的技术价值在于能够用O(n)时间复杂度解决问题,相比暴力搜索大幅提升效率。这种算法在编程竞赛、面试题库和工程优化中都有重要应用,比如LeetCode和Codeforces平台经常出现类似

weixin_34111790的博客 346

C++实现最大数组合:自定义排序与贪心算法详解

在算法与数据结构中,自定义排序是一种强大的工具,它允许开发者超越简单的数值或字典序比较,根据特定业务逻辑(如拼接后的大小)来排列元素。其核心原理在于定义一个满足严格弱序的比较规则,并利用标准库的排序函数(如C++的std::sort)实现高效重排。这种技术的价值在于能将模糊的语义需求(例如“组成最大整数”)转化为精确、可执行的计算机逻辑,是解决一类字符串拼接与排序问题的通用范式。在工程实践中,这常见于需要定制化排序规则的场景,如日志时间戳重组、版本号比较或资源优先级调度。本文以一道高频机试题——重新排列非负

weixin_33226548的博客 309

贪心算法解决股票多次交易最大利润问题

贪心算法是一种在每一步选择中都采取当前状态下最优决策的算法思想,其核心在于通过局部最优解逐步逼近全局最优解。在股票交易场景中,当允许无限次买卖时,贪心策略可以通过捕捉每一个价格上涨的区间来累计最大利润。这种算法的时间复杂度为O(n),空间复杂度为O(1),具有极高的执行效率。C语言实现时需要注意数组越界和整数溢出等常见问题。该算法不仅适用于基础的股票交易问题,经过适当调整后还能处理带交易手续费等变种问题,体现了算法设计中将复杂问题分解为可处理子问题的核心思想。

weixin_31240035的博客 278

贪心算法——最大整数分解最大乘积

/* 设n是正整数。现在要求将n分解为若干互相不同的自然数的和,且是这些自然数的乘积最大。 输入: 10 输出: 30 */ 分析:a+b=const ; 则 |a - b |越小,a*b就越大 ----------------------------------------------------------------------------------------------

Anna的博客 4295

洛谷 P4447分组 | 贪心算法详解与AC代码实现

本文详细分析了洛谷P4447分组问题的贪心算法解法,提供了通过洛谷测试的AC代码,并深入探讨了算法原理和实现细节。

stillwatersss的博客 1308

Quartus安装Altera USB-Blaster安装驱动程序出现问题(代码39)的解决办法

Quartus安装Altera USB-Blaster安装驱动程序出现问题(代码39)的解决办法

MCU_HOT的博客 1万+

贪心算法解决不同整数最少移除问题

贪心算法是一种在每一步选择中都采取当前状态下最优决策的算法思想,其核心价值在于通过局部最优解逐步逼近全局最优解。在数据处理和资源优化场景中,贪心算法因其高效性被广泛应用。本文以力扣1481题为例,详细解析如何利用HashMap统计元素频率,并通过排序实现贪心策略,最终达到用最少移除操作限制不同整数数量的目的。该解法涉及频率统计、排序算法等基础编程技能,时间复杂度为O(n log n),适用于大数据处理、缓存优化等实际工程场景。

weixin_33462167的博客 292

企业级 Agent 在 K8s 上的运行模型

Kubernetes├── Agent Orchestrator(控制面)├── Agent Runtime Pods(执行面)├── Graph DSL(流程层)├── Tool Services(能力层)K8s(调度)+ Graph(流程)+ Agent(决策)+ Tool(执行)+ Guard(治理)

一起修行,不孤单。这里有编程语言、开发工具、学习方法论和踩坑笔记。用简单的话说复杂的事,陪你从小白到进阶。周更干货,欢迎一起成长! 1171

信贷审批中的那些坑:从零开始搭建风控策略体系的5个关键步骤

本文深入探讨了信贷审批中的风控策略体系搭建,从数据陷阱识别、规则冲突诊断到反欺诈攻防,提供了5个关键步骤的实战指南。重点解析了如何通过特征工程、决策树优化和模型可解释性技术,构建动态平衡的风控体系,有效降低逾期风险并提升审批效率。

weixin_29253711的博客 411

贪心算法实战:拼接最大数字的Python实现与优化

贪心算法是解决最优化问题的经典方法,其核心思想是通过局部最优选择达到全局最优。在字符串处理领域,自定义排序规则与贪心策略的结合能高效解决数字拼接等实际问题。以Python实现为例,通过functools.cmp_to_key转换比较函数,结合类型转换和边界处理,可在O(nlogn)时间复杂度内完成最大数字拼接。该技术在电商推荐排序、金融交易组合等场景有广泛应用,特别适合处理需要特定排列规则的业务需求。测试用例设计需覆盖常规、重复数字、全零等边界情况,而性能优化可考虑预计算和并行化处理。

weixin_34355559的博客 327

拜耳阵列(Bayer Pattern)以及常见彩色滤波矩阵(CFA)

本文介绍了拜耳阵列的工作原理(Bayer Pattern)以及常用的彩色滤波矩阵(CFA)

风一样的男子(quinta)的博客 7118

【贪心算法】整数替换,俄罗斯套娃信封问题,可被三整除的最大和,距离相等的条形码,重构字符串

本文介绍了四道LeetCode题目的解题思路和代码实现: 整数替换(LC 397):给出两种解法,递归+记忆化搜索(利用备忘录记录操作次数)和贪心算法(通过二进制分析奇偶性优化操作)。 俄罗斯套娃信封问题(LC 354):转化为最长递增子序列问题,动态规划解法可能超时,推荐贪心+二分法,需注意排序规则(左端点升序,右端点降序)。 可被三整除的最大和(LC 1262):计算总和后,根据余数情况删除最小数或两个次小数,确保和能被3整除。 距离相等的条形码(LC 1054)(未提供完整解析)。 每道题均附代码示例

记录了从0学习Java技术栈的日常 296

不用FFmpeg!纯前端实现RTSP直播的3种现代方案对比(WebSocket/Wasm/WebCodecs)

本文深入探讨了纯前端实现RTSP直播的三种现代技术方案:WebSocket代理转发、Wasm解码和WebCodecs硬解。通过详细的架构设计、性能实测数据和兼容性分析,帮助开发者在安防监控、智慧城市等场景中选择最佳方案,实现低延迟、高效率的视频流处理。

lilh34434的博客 231

提示libfakeroot.so或libfakeroot-sysv.so出错处理方法

嵌入式Linux、Buildroot交叉编译出现fakeroot问题处理方法。

阿xin*的嵌入式AI 1443

最大整数(贪心算法)

题目:[最大整数] 设有n个正整数,将它们连接成一排,组成一个最大的多位整数。 例如:n=3时,3个整数13,312,343,连成的最大整数为34331213。 又如:n=4时,4个整数7,13,4,246,连成的最大整数为7424613。 输入:n N个数 输出:连成的多位数 算法分析:此题很容易想到使用贪心法,在考试时有很多同学把整数按从大到小的顺序连接起来,测试题目的例子也都符合,但最后测试的结果却不全对。按这种标准,我们很容易找到反例:12,121应该组成1212

YSY02的博客 3915

【ARFoundation自学04】AR Tracked Image 图像追踪识别与对应类的调用

1.添加组件 2.创建图像识别库 3.创建识别后追踪的物体(UI、模型等)

leoysq的博客 2560

贪心算法--最大整数问题

#include <iostream> #include <string> #include <sstream> using namespace std; string str[100]=""; string ChangeIntToString(int num){ stringstream ss; string s;//用来放转换成string的数值 ...

qq_38220144的博客 1316

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

贪心算法 设有n个正整数,将它们连接成一排,组成一个最大的多位整数。例如:n=4时,4个整数7,13,4,246,连成的最大整数为7424613。

问题:设有n个正整数,将它们连接成一排,组成一个最大的多位整数。例如:n=4时,4个整数7,13,4,246,连成的最大整数为7424613。 个人思路:一开始看到这个题目的时候并没有想到和贪心算法有什么关系,我的思路也很简单就是运用排序,把这几个数字的首数字进行排序首数字大的排在前面,就题目给定的几个数字运用我这方法是可行的,但是当我写出来之后,发现并不适合所有的情况,例如:121和122,当...

qq_42422846的博客 3118

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

贪心算法实例:将n个短长不一的整数拼成一个最大整数——算法学习笔记

这是我参加“14天阅读挑战赛”第二周第一篇 点击查看“14天阅读挑战赛”详情 贪心算法实例: 最大整数 (——算法学习笔记) 2.1 贪心算法基础 2.1.1 贪心算法本质 2.1.2 贪亦有道 2.1.1 问题分析 1、贪心选择 2、最优子结构 2.1.3 贪心算法秘籍 1、贪心策略,根据求解目标的不同,贪心策略也不同。 2、求解过程,根据贪心策略,一步步得到最优解。 贪心算法个人学习理解,最大的难点在于制定贪心策略。贪心策略不当,可能导致问题的解不是最优或无限逼近最优;甚至是让问题不适用贪心算法

m0_57158496的博客 2046

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

最大整数贪心算法c语言,【贪心算法】最大整数

题目:设有n个正整数,将它们连接成一排,组成一个最大的多位整数。例如:n=3时,3个整数13,312,343,连成的最大整数为34331213。又如:n=4时,4个整数7,13,4,246,连成的最大整数为7424613。输入:n输入n个数。输出:连成的多位数。思路:让这几个数排排序连接成最大的整数,所以应考虑,各个整数顺序,那么对这几个整数排序的准则是什么?准则:设两个整数是a,b,如果a+b大...

weixin_32762235的博客 1257

python使用贪心算法求最大整数问题

对于使用贪心算法的一个比较经典的问题,主要是为了解决最大整数的拼接问题,如果给定一个列表,这个列表中所包括的是一些非负整数,如果对这些整数进行组合,怎样才能组合出一个最大的整数,这里要注意一个问题,有可能整数过大会导致出现溢出的现象,所以返回的数据可以是一个字符类型,这样就可以防止溢出。双层循环遍历数组中两两元素的组合方式,每次循环确定一个位置的元素,经过排序这个列表中元素的顺序得到最终结果,这里要注意一个特殊情况,当列表中元素均为0时,最终返回的结果是多个0,这里要将其转换一个元素0。

Mrsawyer的博客 875
上一篇: 背包问题——动态规划算法详解与实例
下一篇: 架构高性能网站秘笈(一)——了解衡量网站性能的指标
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ปรัชญา แค้วคำมูล

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值