题目链接

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. sqlplus、lsnrctl命令工具不可用(libclntsh.so.11.1)

    原因: libclntsh.so.11.1文件丢失了 解决方法: 在其他机器把这个文件拷贝到目标库安装目录底下的lib目录即可

  2. mysql主从双机keepalived配置

    1.关闭selinux SELINUX=disabled 2.yum安装keepalived yum install -y keepalived 3.修改配置文件 主库配置文件: ! Configur ...

  3. RMAN迁移数据库(不改变文件目录)

    1.目标库创建相应目录mkdir -p /u01/app/oracle/oradata/orclmkdir -p /u01/app/oracle/fast_recovery_area/ORCLmkdi ...

  4. 网络编程-python实现-TCP实现文件下载(1.1.4)

    @ 目录 代码实现 代码实现 客户端 from socket import * def main(): # 创建socket tcp_client_socket = socket(AF_INET, S ...

  5. 如何修改openstack虚拟机密码

    1.虚拟机创建时设置密码 计算节点安装以下软件包 yum install libguestfs python-libguestfs libguestfs-tools-c 配置计算节点nova配置文件/ ...

  6. Core3.0返回的Json数据大小写格式问题

    前言 测试发现,CoreWebAPI返回的Json数据,会将字段的首字母转换为小写, 经百度得,返回数据会默认驼峰命名,导致的. 随即百度, https://www.cnblogs.com/cdone ...

  7. 2.Redis info命令详解

    命令 127.0.0.1:6379> info [server|clients|memory|stats|...] # Server redis_version:5.0.4 #redis版本 r ...

  8. 【Tomcat】手写迷你版Tomcat

    目录 源码地址 一,分析 Mini版Tomcat需要实现的功能 二,开发--准备工作 2.1 新建Maven工程 2.2 定义编译级别 2.3 新建主类编写启动入口和端口 三,开发--1.0版本 3. ...

  9. IDEA和eclips工具对比

    描述 eclipse idea 在当前类查找方法 ctrl+o ctrl+F12 查找文件   ctrl+shift+N 大小写转换 ctrl+shift+X    ctrl+shift+Y ctrl ...

  10. request.getContextPath()返回值问题

    转自:http://blog.sina.com.cn/s/blog_6cbe0cff0101j6jl.html request.getContextPath()是在开发Web项目时,经常用到的方法,其 ...