题目链接

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. Spark-3-调优要点

    1 内存调整要点 Memory Tuning,Java对象会占用原始数据2~5倍甚至更多的空间.最好的检测对象内存消耗的办法就是创建RDD,然后放到cache里面去,然后在UI上面看storage的变 ...

  2. SQL:我为什么慢你心里没数吗?

    SQL 语句执行慢的原因是面试中经常会被问到的,对于服务端开发来说也是必须要关注的问题. 在生产环境中,SQL 执行慢是很严重的事件.那么如何定位慢 SQL.慢的原因及如何防患于未然.接下来带着这些问 ...

  3. openstack高可用集群17-openstack集成Ceph准备

    Openstack集成Ceph准备 Openstack环境中,数据存储可分为临时性存储与永久性存储. 临时性存储:主要由本地文件系统提供,并主要用于nova虚拟机的本地系统与临时数据盘,以及存储gla ...

  4. zabbix学习(一)——LNMP环境搭建及zabbix安装

    第一部分:LNMP环境搭建 一.环境说明: OS:   centos7.6_x64nginx:nginx-1.16.0php:   php-7.1.11mysql:mysql-5.6.44 zabbi ...

  5. Android 7.0应用之间共享文件

    原文首发于微信公众号:躬行之,欢迎关注交流! 开发中经常需要将某个文件向另一个应用程序传递,如图片上传到另一个应用程序.文件在不同存储路径之间的复制粘贴等都需要共享文件,可以这样理解接收文件的应用是在 ...

  6. js深克隆与浅克隆

    定义: 浅克隆: 克隆对象的一层属性, 如果对象还有对象的话,里面的对象没有进行克隆,只是把地址给了别人.也可以理解为只是简单的克隆了躯体,但是没有得到其灵魂: 深克隆:克隆对象的多层属性,对象里面还 ...

  7. DataTable添加checkbox实现表格数据全选,单选(点选)

    Datatables是一款jquery表格插件.它是一个高度灵活的工具,可以将任何HTML表格添加高级的交互功能. 分页,即时搜索和排序 几乎支持任何数据源:DOM, javascript, Ajax ...

  8. MVC中Autofac的使用

    参考博文 https://www.cnblogs.com/liupeng/p/4806184.html https://blog.csdn.net/qq_37214567/article/detail ...

  9. Selenium switch_to方法

    在web应用自动化测试中,点击一个链接或者按钮会打开一个新的浏览器窗口,会出现多个窗口实例.默认情况下的焦点在主窗口(父窗口),如果要对子窗口进行操作,就需要首先切换到子窗口. Selenium We ...

  10. [leetcode299] 299. Bulls and Cows

    public String getHint(String secret, String guess) { /* 判断bull 是通过比较两个字符串的每一位,每次相同就删除该字符出现的次数,因为后边的 ...