题目链接

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. mysql 5.7.26 忘记root密码

    1.关闭mysql [root@mysql ~]# /etc/init.d/mysqld stopShutting down MySQL.. SUCCESS! 2.修改参数文件/etc/my.cnf ...

  2. Kafka消费者手动提交消息偏移

    生产者每次调用poll()方法时,它总是返回由生产者写入Kafka但还没有消费的消息,如果消费者一致处于运行状态,那么分区消息偏移量就没什么用处,但是如果消费者发生崩溃或者有新的消费者加入群组,就会触 ...

  3. Redis安装教程及安装报错解决方案(大佬勿喷)

    安装环境:CentOS7 Redis版本:redis-6.0.9.tar.gz 依次按照以下顺序执行: 1. [root@localhost ~]# wget https://download.red ...

  4. CVE-2019-0708——RDP漏洞利用

    影响系统:windows2003.windows2008.windows2008 R2.windows xp .win7环境:攻击机:kali ip:192.168.40.128靶机:windows ...

  5. ElasticSearch 史上最全文章

    老规矩,本篇文章 不做 ElasticSearch 的 编码讲解 ,只介绍 文章学习的一些优秀文章 重点在于不要循规蹈矩,教程 这样走,你不一定要按他这样走,按自己的方式来,学习效率会更高,网上的教程 ...

  6. day019python之面向对象基础1

    面向对象基础 目录 面向对象基础 1 面向对象基础 1.1 面向对象的由来 1.2 面向对象编程介绍 1.2.1 回顾面向过程设计 1.2.2 面向对象设计 2 类与对象 2.1 基本使用 2.2 示 ...

  7. Python制作折线图

    利用python的第三方包Pygal制作简单的折线图. 申明:本文仅供学习交流使用.源码大部分来自<python编程从入门到实践>:如有侵权,请联系我删除. 1 #!usr/bin/env ...

  8. Autofac官方文档翻译--二、解析服务--2隐式关系类型

    Autofac 隐式关系类型 Autofac 支持自动解析特定类型,隐式支持组件与服务间的特殊关系.要充分利用这些关系,只需正常注册你的组件,但是在使用服务的组件或调用Resolve()进行类型解析时 ...

  9. axios前端加密通讯的处理

    axios前端加密通讯的处理 今天谈一谈前段时间,项目中遇见的前端axios加解密的处理. 先谈谈项目前景,因为安全的要求,所以我们要把前端所有的请求都得加密与服务端应用进行通讯,当然服务端的响应也是 ...

  10. 想成为Git大神?从学会reset开始吧

    大家好,今天我们来着重介绍一个非常关键的功能就是reset.在上一篇文章介绍修改历史记录的时候曾经提到过,当我们需要拆分一个历史提交记录的时候需要使用reset.估计很多小伙伴不明白,reset究竟做 ...