新闻详情

新闻详情

首页 / 资讯中心 / 详情

670. 最大交换(maximum 单调栈)

发布时间:2026/9/16 10:56:42来源:尧图网络
670. 最大交换(maximum 单调栈)
链接​​​​​​670. 最大交换题解力扣LeetCode官网 - 全球极客挚爱的技术成长平台1.保持单调递减2.如果当前元素比前面的大则从当前位置到末尾找到一个最大的元素越后面越好3.在前面的元素中找到一个比他小的元素越前面越好因为前面的队列是单调的可以用二分查找找到第一个target的位置4.交换这两个元素class Solution { public: int maximumSwap(int num) { if (num 0) { return 0; } std::string str to_string(num); stackint sta; int i 0; for (i 0; i str.size(); i) { if (!sta.empty() str[sta.top()] str[i]) { break; } sta.push(i); } if (i str.size()) { return num; } int max_val i; for (int right i; i str.size(); i) { if (str[max_val] str[i]) { max_val i; } } int left i-1; while (!sta.empty() str[max_val] str[sta.top()]) { left sta.top(); sta.pop(); } swap(str[left], str[max_val]); return atoi(str.c_str()); } };class Solution { public: int maximumSwap(int num) { // 321578 if (num 0) { return num; } string str to_string(num); // 按照单调递减查找找到第一个非递减的位置 int i 1; for (; i str.size(); i) { if (str[i] str[i-1]) { break; } } if (i str.size()) { return num; } // [i,size) 之间找到一个最大的数字,倒着查询这样有相同的是在最后面的位置 int max_index i; for (int j i; j str.size(); j) { if (str[j] str[max_index]) { max_index j; } } // 前面都是降序的找到第一个大于交换元素的位置停止 int j i-1; for (j i-1; j 0; --j) { //cout swap: str[j] str[max_index] endl; if (str[j] str[max_index]) { break; } } // 置换最大元素 swap(str[j1], str[max_index]); return atoi(str.c_str()); } };class Solution { public: int maximumSwap(int num) { string str to_string(num); string sta; int i 0; for (i 0; i str.size(); i) { if (!sta.empty() sta.back() str[i]) { break; } sta str[i]; } if (i str.size()) { return stoi(str); } // 在 [i, n-1] 中找最大的数字最右边的最大 int max_index i; for (int j i; j str.size(); j) { if (str[max_index] str[j]) { max_index j; } } // 在 [0, i-1] 中找最左边小于 str[max_index] 的位置 // 因为 [0, i-1] 非递减用二分找第一个 target的位置 int left 0; int right i - 1; while (left 1 right) { int mid left (right - left) / 2; if (str[mid] str[max_index]) { right mid; // ✅ mid 满足往左找 } else { left mid; // ✅ mid 不满足往右找 } } // 循环结束时 left 和 right 相邻优先检查 left更靠左 int index right; if (str[left] str[max_index]) { index left; } swap(str[index], str[max_index]); return stoi(str); } };
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Android权限管理SDK设计:分层架构与动态分组实践 2026/9/16 11:36:03

Android权限管理SDK设计:分层架构与动态分组实践

1. 工业级权限SDK的设计挑战与核心诉求在Android生态中,权限管理一直是应用开发的关键环节。随着应用功能日益复杂,简单的运行时权限请求模式已无法满足企业级应用的需求。我曾参与过多个百万级DAU应用的权限架构改造,深刻体会到传统方案的三…

阅读更多 →
微群人脉微信小程序源码部署与LNMP环境搭建实战 2026/9/16 11:36:03

微群人脉微信小程序源码部署与LNMP环境搭建实战

简介:微群人脉微信小程序源码是一套基于微信生态的社群运营与流量裂变系统,适合开发者、站长及寻求私域裂变工具的个人或团队部署使用。新版针对旧版痛点做了关键优化,用户登录后直接进入微群界面,不再被广告页拦截,有…

阅读更多 →
开关二极管核心参数解析:trr、Cj与Ron的工程本质 2026/9/16 11:36:03

开关二极管核心参数解析:trr、Cj与Ron的工程本质

1. 从“开关二极管”这个称呼说起:它到底不是普通二极管很多人第一次在电路图里看到“开关二极管”这个词,下意识会想:“不就是个二极管吗?PN结单向导电,整流、检波、钳位……这些功能我早背熟了。”——这种理解放在教…

阅读更多 →
SSD1305 OLED驱动开发:从时序协议到稳定点亮实战 2026/9/16 11:36:03

SSD1305 OLED驱动开发:从时序协议到稳定点亮实战

简介:本资源是一份面向嵌入式初学者与51单片机开发者的SSD1305 OLED显示屏驱动实践资料包,聚焦于低功耗、高对比度的12864单色OLED显示方案落地。压缩包共4个文件(73KB),含2幅关键电路图(BMP格式&#xff0…

阅读更多 →
React + ECharts 大屏项目实战:组件封装、适配与数据轮询 2026/9/16 11:36:03

React + ECharts 大屏项目实战:组件封装、适配与数据轮询

简介:这份资源是一套基于React与ECharts的数据可视化大屏开源项目,主要采用TypeScript开发,并辅以JavaScript、CSS与HTML。项目面向前端开发者、数据可视化工程师及需要快速搭建大屏场景的团队,适用于后台监控、运营展示、综合态势…

阅读更多 →
一步步免费部署 LunaTV 影视聚合播放器:Zeabur 平台完整指南 2026/9/16 11:33:01

一步步免费部署 LunaTV 影视聚合播放器:Zeabur 平台完整指南

一步步免费部署 LunaTV 影视聚合播放器:Zeabur 平台完整指南 【免费下载链接】LunaTV 本项目采用 CC BY-NC-SA 协议,禁止任何商业化行为,任何衍生项目必须保留本项目地址并以相同协议开源 项目地址: https://gitcode.com/GitHub_Trending/l…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞