leetcode 402. Remove K Digits 、321. Create Maximum Number
402. Remove K Digits
https://www.cnblogs.com/grandyang/p/5883736.html
https://blog.csdn.net/fuxuemingzhu/article/details/81034522
https://blog.csdn.net/qq508618087/article/details/52584133
题目的要求是删除k个字符,在保证原字符串字符相对位置不变的情况下获得最小的数字。
一个贪心的思想,维护一个单调递增的栈。只能弹出k次。
res.resize(keep)对于在while循环里删除了k次的没影响,但对于那些没有删除k次的就需要只提取前keep个数值。因为这是一个单调递增栈,同样keep位的数字,前面的生成的数字更小。
class Solution {
public:
    string removeKdigits(string num, int k) {
        string res = "";
        int keep = num.size() - k;
        for(char word : num){
            while(k && res.size() && word < res.back()){
                res.pop_back();
                k--;
            }
            res.push_back(word);
        }
        res.resize(keep);
        while(!res.empty() && res[] == '')
            res.erase(res.begin());
        return res.empty() ? "" : res;
    }
};
321. Create Maximum Number
https://www.cnblogs.com/grandyang/p/5136749.html
这道题和402. Remove K Digits很类似,maxNumber函数基本上就是402. Remove K Digits,只是这道题是求最大的值,且给的k不是删除的个数,而是保留的个数。
将两个数组进行按照大小合并时,不能使用那种两个指针滑动的方式。
两个vector数组进行比较,比较的是第一个位置的数的大小,如果相等会比较第二个位置的大小,直到有大小区别。
以下这个代码就证明了。
#include <iostream>
#include <vector> using namespace std; int main(){
int a[] = {,};
int b[] = {,,};
vector<int> num1(a,a+);
vector<int> num2(b,b+);
if(num1 > num2)
cout << "debug" << endl;
}
整个的思路其实就是在nums1中选i个元素组成的最大的数,nums2选k-i个元素组成最大的数,然后进行组合。
class Solution {
public:
    vector<int> maxNumber(vector<int>& nums1, vector<int>& nums2, int k) {
        int size1 = nums1.size(),size2 = nums2.size();
        vector<int> res;
        for(int i = max(,k - size2);i <= min(size1,k);i++){
            res = max(res,mergeVector(maxNumber(nums1,i),maxNumber(nums2,k-i)));
        }
        return res;
    }
    vector<int> maxNumber(vector<int> nums,int k){
        int del = nums.size() - k;
        vector<int> res;
        for(int i = ;i < nums.size();i++){
            while(del && res.size() && nums[i] > res.back()){
                res.pop_back();
                del--;
            }
            res.push_back(nums[i]);
        }
        res.resize(k);
        return res;
    }
    vector<int> mergeVector(vector<int> nums1,vector<int> nums2){
        vector<int> res;
        while(!nums1.empty() || !nums2.empty()){
            if(nums1 > nums2){
                res.push_back(nums1[]);
                nums1.erase(nums1.begin());
            }
            else{
                res.push_back(nums2[]);
                nums2.erase(nums2.begin());
            }
        }
        return res;
    }
};
leetcode 402. Remove K Digits 、321. Create Maximum Number的更多相关文章
- [LeetCode] 402. Remove K Digits 去掉K位数字
		Given a non-negative integer num represented as a string, remove k digits from the number so that th ... 
- leetcode 402. Remove K Digits
		Given a non-negative integer num represented as a string, remove k digits from the number so that th ... 
- 402. Remove K Digits/738.Monotone Increasing Digits/321. Create Maximum Number
		Given a non-negative integer num represented as a string, remove k digits from the number so that th ... 
- 【LeetCode】402. Remove K Digits 解题报告(Python)
		[LeetCode]402. Remove K Digits 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http: ... 
- 321. Create Maximum Number 解题方法详解
		321. Create Maximum Number 题目描述 Given two arrays of length m and n with digits 0-9 representing two ... 
- 321. Create Maximum Number
		/* * 321. Create Maximum Number * 2016-7-6 by Mingyang */ public int[] maxNumber(int[] nums1, int[] ... 
- [LeetCode] 321. Create Maximum Number 创建最大数
		Given two arrays of length m and n with digits 0-9 representing two numbers. Create the maximum numb ... 
- LeetCode 321. Create Maximum Number
		原题链接在这里:https://leetcode.com/problems/create-maximum-number/description/ 题目: Given two arrays of len ... 
- 321. Create Maximum Number (c++ ——> lexicographical_compare)
		Given two arrays of length m and n with digits 0-9 representing two numbers. Create the maximum numb ... 
随机推荐
- mysql字典取值,列表包含
			SELECT * FROM e where JSON_CONTAINS(json_extract(scope_detail, '$.shop'), '001'); 
- 《奋斗吧!菜鸟》 第九次作业:Beta冲刺 Scrum meeting 1
			项目 内容 这个作业属于哪个课程 任课教师链接 作业要求 https://www.cnblogs.com/nwnu-daizh/p/11056511.html 团队名称 奋斗吧!菜鸟 作业学习目标 掌 ... 
- 团队作业第六次—团队Github实战训练(追光的人)
			所属课程 软件工程1916 作业要求 团队作业第六次-团队Github实战训练 团队名称 追光的人 作业目标 搭建一个相对公平公正的抽奖系统,根据QQ聊天记录,完成从统计参与抽奖人员颁布抽奖结果的基本 ... 
- 用python爬取全网妹子图片【附源码笔记】
			这是晚上没事无聊写的python爬虫小程序,专门爬取妹子图的,养眼用的,嘻嘻!身为程序狗只会这个了! 废话不多说,代码附上,仅供参考学习! """ 功能:爬取妹子图全网妹 ... 
- 导入外部proto获取商品信息
			Models.proto syntax = "proto3"; package services; //商品模型 message ProdModel { int32 prod_id ... 
- 运算符   & |  ^ ~  >>     <<   讲解
			字节”是byte,“位”是bit :1 byte = 8 bit : char 在java中是2个字节.java采用unicode,2个字节(16位)来表示一个字符. char 16位2个字节 byt ... 
- /etc/shells
			List of acceptable shells for chpass(1). Ftpd will not allow users to connect who are not using one ... 
- QQ首页 案例
			一.知识点 ①background-attachment属性设置背景图像是否固定或者随着页面的其余部分滚动.scroll默认值.背景图像会随着页面其余部分的滚动而移动.fixed当页面的其余部分滚动时 ... 
- Ubuntu下面删除和卸载软件
			1.卸载nginx 1)首先执行第一条命令查出想关的软件包: dpkg --get-selections | grep nginx 2)开始执行卸载列出的common 和core 这个2个安装包 一个 ... 
- 「ZJOI2019」线段树
			传送门 Description 线段树的核心是懒标记,下面是一个带懒标记的线段树的伪代码,其中 tag 数组为懒标记: 其中函数\(Lson(Node)\)表示\(Node\)的左儿子,\(Rson( ... 
