题目链接

https://leetcode-cn.com/problems/create-maximum-number/

思路:

心都写碎了....

也许就是不适合吧....

你是个好人...

class Solution {
public:
//单个子序列的情况 -> 单调栈的思想可以处理
//多个序列的情况,分类讨论,比如第一个序列s 个值,那么必然第二个序列只有k-s个值
vector<int> solve(vector<int> nums,int k){//保留单个序列的k个值
int n=nums.size();
if(k>=n) return nums;
int left=n-k;
vector<int> ans;
for(int i=0;i<nums.size();i++){
while(ans.size() && nums[i]>ans.back() && left){//这里必须严格大于
ans.pop_back();
left--;
}
ans.push_back(nums[i]);
} while(left && ans.size()) {
ans.pop_back();
left--;
} return ans;
} vector<int> merge(vector<int> nums1,vector<int> nums2) {//合并两个有序列表,不对,这两个列表不能保证是有序的
int n=nums1.size(),m=nums2.size();
int i=0,j=0,k=0;
vector<int> ans=vector<int>(n+m,0);
for(int k=0;k<n+m;k++){
ans[k]=max_(nums1,i,nums2,j)?nums1[i++]:nums2[j++];
} return ans;
} // bool max_(vector<int> tmp,vector<int> tmp2){//tmp > tmp2
// int n=tmp.size();
// for(int i=0;i<n;i++){
// if(tmp[i]>tmp2[i]) return true;
// else if(tmp[i]<tmp2[i]) return false;
// }
// return false;
// }
bool max_(vector<int> tmp,int i,vector<int> tmp2,int j){//判断tmp >= tmp2 例如:"7" >"67"
int n1=tmp.size(),n2=tmp2.size();
while(i<n1 && j<n2 && tmp[i]==tmp2[j]) {i++;j++;} return j==n2 || (i<n1 && tmp[i]>tmp2[j]);
}
vector<int> maxNumber(vector<int>& nums1, vector<int>& nums2, int k) {
int n=nums1.size();
int m=nums2.size();//
if(!k) return {}; vector<int> ans=vector<int>(k,0);
if(n==0 && m==0) return ans; if(n>m) return maxNumber(nums2,nums1,k); for(int s=max(0,k-m);s<=k && (s<=n);s++){//这里必须从k-m开始 vector<int> res=solve(nums1,s);
vector<int> res2=solve(nums2,k-s);
// for(auto nxt: res2) printf("%d ",nxt);
// printf("\n"); // cout<<"111\n"; vector<int> res3=merge(res,res2);
// for(auto nxt: res3) printf("%d ",nxt);
// printf("\n"); if(res3.size()==k && max_(res3,0,ans,0)) ans=res3; // for(auto nxt: ans) printf("%d ",nxt);
// printf("\n");
} return ans;
}
};

leetcode 321. 拼接最大数(单调栈,分治,贪心)的更多相关文章

  1. Java实现 LeetCode 321 拼接最大数

    321. 拼接最大数 给定长度分别为 m 和 n 的两个数组,其元素由 0-9 构成,表示两个自然数各位上的数字.现在从这两个数组中选出 k (k <= m + n) 个数字拼接成一个新的数,要 ...

  2. Leetcode 321.拼接最大数

    拼接最大数 给定长度分别为 m 和 n 的两个数组,其元素由 0-9 构成,表示两个自然数各位上的数字.现在从这两个数组中选出 k (k <= m + n) 个数字拼接成一个新的数,要求从同一个 ...

  3. LeetCode Monotone Stack Summary 单调栈小结

    话说博主在写Max Chunks To Make Sorted II这篇帖子的解法四时,写到使用单调栈Monotone Stack的解法时,突然脑中触电一般,想起了之前曾经在此贴LeetCode Al ...

  4. [LeetCode]739. 每日温度(单调栈)

    题目 根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数.如果之后都不会升高,请在该位置用 0 来代替. 例如,给定一个列表 temperatures ...

  5. 洛谷 P1198 [JSOI2008]最大数——单调栈/线段树

    先上一波题目 https://www.luogu.org/problem/P1198 题目要求维护后缀最大值 以及在数列的最后面添加一个数 这道题呢我们有两种做法 1.单调栈 因为只需要维护后缀最大值 ...

  6. 奇袭(单调栈+分治+桶排)(20190716 NOIP模拟测试4)

    C. 奇袭 题目类型:传统 评测方式:文本比较 内存限制:256 MiB 时间限制:1000 ms 标准输入输出   题目描述 由于各种原因,桐人现在被困在Under World(以下简称UW)中,而 ...

  7. 【TOJ 4493】Remove Digits(单调栈贪心)

    描述 Given an N-digit number, you should remove K digits and make the new integer as large as possible ...

  8. 单调栈&单调队列学习笔记!

    ummm,,,都是单调系列就都一起学了算了思想应该都差不多呢qwq 其实感觉这俩没有什么可说的鸭QAQ就是维护一个单调的东西,区别在于单调栈是一段进一段出然后单调队列是一段进另一段出?没了 好趴辣重点 ...

  9. BZOJ1012: [JSOI2008]最大数maxnumber [线段树 | 单调栈+二分]

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 8748  Solved: 3835[Submi ...

随机推荐

  1. 在Chrome、Firefox等高版本浏览器中实现低延迟播放海康、大华RTSP

    一.背景 现在到处是摄像头的时代,随着带宽的不断提速和智能手机的普及催生出火热的网络直播行业,新冠病毒的大流行又使网络视频会议系统成为商务会议的必然选择,因此RTSP实时视频流播放及处理不再局限于安防 ...

  2. oracle ADG启动顺序

    一.oracle ADG启动顺序 1.启动主备库监听 [oracle@dgdb1 ~]$ lsnrctl start [oracle@dgdb2 ~]$ lsnrctl start   2.启动备库 ...

  3. 2020-2021-1 20209307 《Linux内核原理与分析》第九周作业

    这个作业属于哪个课程 <2020-2021-1Linux内核原理与分析)> 这个作业要求在哪里 <2020-2021-1Linux内核原理与分析第九周作业> 这个作业的目标 & ...

  4. html 01-认识Web和Web标准

    01-认识Web和Web标准 #Web.网页.浏览器 #Web Web(World Wide Web)即全球广域网,也称为万维网. 我们常说的Web端就是网页端. #网页 网页是构成网站的基本元素.网 ...

  5. js上 十五、数组-1

    十五.数组-1 #1.什么是数组 组:由多个成员构成的一个集体. 数组:数组是值的有序集合 值就是前面所讲过的这些数据(各种数据类型的都可以) 是数组中,每一个值(如100,'js',true)都称之 ...

  6. 网站开发学习Python实现-Django的models学习-生鲜项目(6.3.2)

    @ 目录 1.说明 2.模型类的设计 3.代码的具体实现 4.详情地址 关于作者 1.说明 models是django的很重要的部分,所以深入研究. 本文章的所研究项目为黑马教育python课程中的项 ...

  7. 第九章 Nacos Config--服务配置

    今天咱们接着 上一篇 第八章 SMS–短信服务 继续写 SpringCloud Alibaba全家桶 -> 第九章 Nacos Config–服务配置,废话不多说,开干 9.1 服务配置中心介绍 ...

  8. Unity射击游戏实例—物理碰撞的实现

    前言: 这一篇章实现物理碰撞,就是游戏体碰撞减装甲,这几天想要试着做出兼具装甲与血量的模式,可自动回复的装甲与永久损伤的血量,在一些平台上找到了不少有意思的模型,有兴趣的可以自己找找模型替换一下. 射 ...

  9. 详述网络中ARP安全的综合功能

    组网图形 ARP安全简介 ARP(Address Resolution Protocol)安全是针对ARP攻击的一种安全特性,它通过一系列对ARP表项学习和ARP报文处理的限制.检查等措施来保证网络设 ...

  10. 前方高能!看Python程序员是表白的

    一.️爱心墙️ 通过爬虫搜集到粉丝的头像,然后利用PIL库拼接出爱心墙的形状: 二.代码分析 1.头像爬取 在个人中心点击我的粉丝便可以看到自己的粉丝,通过抓包可知对应的接口为: url = 'htt ...