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

贪心算法求解边界最大数

贪心算法求解边界最大数(拼多多2504、排列问题)

多多有两个仅由正整数构成的数列 s1 和 s2,多多可以对 s1 进行任意次操作,每次操作可以置换 s1 中任意两个数字的位置。多多想让数列 s1 构成的数字尽可能大,但是不能比数列 s2 构成的数字大。请问在经过任意次操作后,满足上述条件的数列 s1 构成的数字是多少。

s1 = 21453
s2 = 14682
输出res = 14532

### 5.2 C++解决方案时间复杂度:
最坏情况:O(n!)
平均情况:O(n^2)O(n^3)
最好情况:O(n)
空间复杂度:O(n)#include <algorithm>
#include <iostream>
#include <string>// 全局变量,用于存储小于 s2 的 s1 的最大排列结果
std::string max_result = "";// 回溯函数,用于生成 s 的所有排列并找出符合条件的最大排列
void backtrack(std::string &s, int index, const std::string &s2) {// 当 index 等于 s 的长度时,说明已经生成了一个完整的排列if (index == s.length()) {// 检查该排列是否小于 s2 且大于当前记录的最大排列 max_resultif (s < s2 && s > max_result) {// 若满足条件,则更新 max_resultmax_result = s;}return;}// 记录当前位置可以使用的最大字符char max_char = s2[index];// 尝试将 s 中 index 位置及其后面的每个位置的字符与 index 位置交换for (int i = index; i < s.length(); ++i) {// 剪枝 如果当前字符大于目标字符,跳过if (s[i] > max_char)continue;// 交换 s[index] 和 s[i] 的位置std::swap(s[index], s[i]);// 剪枝 如果当前前缀小于目标前缀,继续递归if (s.substr(0, index + 1) <= s2.substr(0, index + 1)) {backtrack(s, index + 1, s2);}// 回溯操作,将字符交换回来std::swap(s[index], s[i]);//剪枝 如果已经找到了一个有效的排列,且当前字符等于目标字符,可以提前返回if (!max_result.empty() && s[i] == max_char) {break;}}
}// 主函数,用于找出小于 s2 的 s1 的最大排列
int largest_less_than(const std::string &s1, const std::string &s2) {// 检查 s1 和 s2 的长度是否相等if (s1.length() > s2.length()) {return -1;}if(s1.length() < s2.length()){std::string s = s1;std::sort(s.begin(), s.end(), std::greater<char>());return stoi(s);}// 复制 s1 到 s 中,并对其进行降序排序std::string s = s1;std::sort(s.begin(), s.end(), std::greater<char>());// 调用回溯函数开始生成排列backtrack(s, 0, s2);// 返回结果return max_result.empty() ? -1 : std::stoi(max_result);
}int main() {// 定义示例字符串 s1std::string s1 = "67433";// 定义示例字符串 s2std::string s2 = "14682";// 调用 largest_less_than 函数得到结果int res = largest_less_than(s1, s2);// 输出结果std::cout << "res = " << res << std::endl;return 0;
}
http://www.xdnf.cn/news/228295.html

相关文章:

  • 精益数据分析(34/126):深挖电商运营关键要点与指标
  • SAP-ABAP:在SAP系统中,COEP表(成本控制对象行项目表)详解
  • AI 生成UI交互效果
  • 基于C++的IOT网关和平台6:github项目ctGateway后台服务和数据模型
  • C++负载均衡远程调用学习之自定义内存池管理
  • SVTAV1源码-set_all_ref_frame_type
  • 专家访谈:从文本到视频,GEO多模态优化的实战法则
  • IDEA git配置[通俗易懂]
  • halcon打开图形窗口
  • 模型部署技巧(一)
  • Python爬虫实战:获取彼岸网高清素材图片
  • Windows 10 环境二进制方式安装 MySQL 8.0.41
  • Locate 3D:Meta出品自监督学习3D定位方法
  • 大模型——使用 StarRocks 作为向量数据库
  • Go 写一个简单的Get和Post请求服务
  • 03_spring配置优先级
  • 回归分析丨基于R语言复杂数据回归与混合效应模型【多水平/分层/嵌套】技术与代码
  • 数智化招标采购系统针对供应商管理解决方案(采购如何管控供应商)
  • Qt/C++面试【速通笔记六】—Qt 中的线程同步
  • 合并两个有序数组
  • DataWorks Copilot 集成 Qwen3-235B-A22B混合推理模型,AI 效能再升级!
  • uniapp 实现时分秒 分别倒计时
  • 大数据平台与数据仓库的核心差异是什么?
  • MySQL RR (Repeatable Read) 隔离级别规则细节
  • 【计算机视觉】目标检测:深度解析Detectron2:Meta开源目标检测与图像分割框架实战指南
  • Linux Nginx网站服务【完整版】
  • 从高端制造到民生场景:天元轻量化软件的“破局”之路
  • 【QT】编写第一个 QT 程序 对象树 Qt 编程事项 内存泄露问题
  • 大语言模型 06 - 从0开始训练GPT 0.25B参数量 - MiniMind 实机配置 GPT训练基本流程概念
  • ASP.NET MVC​ 入门与提高指南六