321. Create Maximum Number

题目链接:https://leetcode.com/problems...

这题就遍历所有可能的切分点n然后mergenums1[n]nums2[k-n]求到最大值,nums1[n]nums2[k-n]分别是nums1有n个数时候的最大值,和nums2有k-n个数时的最大值。merge部分比较简单,来看求最大值的部分。
设产生的最大值是max,max的size是n,num的size是m。现在已经选了了i个digit,最大值是max[0:i],num用了j个数,现在指向num[j]。那么这就是用stack可以解决的问题了,如果stack的top元素小于num[j]且剩下的digits还够的话,那就一直pop,然后把num[j]放进栈顶,剩下的digits够的条件是:m - j >= n - i,所以可以pop的条件也就是:
while(i > 0 && m - j > n - i && num[j] > max[i])

现在来确定切分点n的范围:0 <= n <= nums1.length并且0 <= k - n <= nums2.length,也就是k - num2.length <= n <= k,所以最后n的范围是:max(0, k-num2.length) <= n <= min(nums1.length, k)

merge的时候注意,如果两个array里面当前int相同,要比较它们之后的数字,选大的。

参考:
https://discuss.leetcode.com/...

public class Solution {public int[] maxNumber(int[] nums1, int[] nums2, int k) {int[] global = new int[k];if(k == 0) return global;for(int n = Math.max(0, k-nums2.length); n <= Math.min(nums1.length, k); n++) {int[] max1 = getLocalMax(nums1, n);int[] max2 = getLocalMax(nums2, k-n);int[] temp = merge(max1, max2);if(greater(temp, 0, global, 0)) global = temp;}return global;}private boolean greater(int[] a, int i, int[] b, int j) {while(i < a.length && j < b.length) {if(a[i] > b[j]) return true;else if(a[i] < b[j]) return false;i++; j++;}// equal is falsereturn i < a.length;}private int[] getLocalMax(int[] num, int n) {int[] res = new int[n];int m = num.length;int i = 0;for(int j = 0; j < m; j++) {while(i > 0 && m - j > n - i && num[j] > res[i-1]) i--;if(i < n) res[i++] = num[j];}return res;}private int[] merge(int[] num1, int[] num2) {int n1 = num1.length, n2 = num2.length;int[] res = new int[n1+n2];int i = 0, j = 0;for(int k = 0; k < res.length; k++) {if(i >= n1) res[k] = num2[j++];else if(j >= n2) res[k] = num1[i++];else res[k] = greater(num1, i, num2, j) ? num1[i++] : num2[j++];}return res;}
}

321. Create Maximum Number相关推荐

  1. 321. Create Maximum Number 解题方法详解

    321. Create Maximum Number 题目描述 Given two arrays of length m and n with digits 0-9 representing two ...

  2. leetcode 321 Create Max Number

    leetcode 321 Create Max Number greedy的方法,由于有两个数组,我们很自然的想到从数组1中选i个数,数组2中选k-i个数,这样我们只需要遍历max(0, k-数组2长 ...

  3. LeetCode-321 Create Maximum Number

    题目描述 Given two arrays of length m and n with digits 0-9 representing two numbers. Create the maximum ...

  4. OpenStack 创建虚拟机错误:Exceeded maximum number of retries. Exhausted all hosts available for retrying bui

    错误 Ubuntu 20.04 下手动安装 OpenStack Xena 版 在创建虚拟机的时候总是失败 openstack server create --flavor m1.nano --imag ...

  5. openstack创建实例报错Exceeded maximum number of retries

    Error: 实例 "vm2" 执行所请求操作失败,实例处于错误状态.: 请稍后再试 [错误: Exceeded maximum number of retries. Exceed ...

  6. Oracle 数据库设置最大进程数参数方法,oracle最大进程数满了处理方法,sysdba管理员登录报“maximum number of processes (150) exceeded“问题解决

    oracle 数据库使用 sysdba 管理员登录报: ORA-00020: maximum number of processes (150) exceeded 译:超过了最大进程数(150) 方法 ...

  7. Linux Increase The Maximum Number Of Open Files / File Descriptors (FD)

    http://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/ How do I increase the ...

  8. WCF:Maximum number of items that can be serialized or deserialized in an object graph is '65536'.

    错误 Maximum number of items that can be serialized or deserialized in an object graph is '65536'. Cha ...

  9. leetcode 330. Patching Array | 1798. Maximum Number of Consecutive Values You Can Make

    1798. Maximum Number of Consecutive Values You Can Make | 1798. 你能构造出连续值的最大数目 https://leetcode.com/p ...

  10. The number of requested virtual cores per node 3 exceeds the maximum number of virtual cores 2

    报错如下: yarn-session.sh  -tm 2048 -s 3 2020-06-08 22:24:20,317 WARN org.apache.flink.yarn.cli.FlinkYar ...

最新文章

  1. 用户月活跃度在哪里可以查_2020年12月计算机等级考试报名时间,另外11月6号可以查9月考试成绩...
  2. java设计模式---合成模式2
  3. oracle+数据到+mysql数据库乱码问题_Linux系统Oracle数据库乱码问题的解决方法
  4. 语言代码编程大赛简讯_精品干货:C语言的高效编程与代码优化
  5. linux和信息资源管理,Linux top命令详解
  6. graph slam tutorial :从推导到应用2
  7. mysql 字符串枚举类型转换_MyBatis里字段到枚举类型的转换/映射
  8. 模版 ----- DP
  9. string 与stringbuilder的区别
  10. 如何画好一套线性图标
  11. SAP cash discount 现金折扣
  12. oracle删除闪回文件,oracle的闪回查询,闪回删除:
  13. 音视频封装到MP4/MP3ffmpeg(十四)
  14. 【天光学术】现当代文学论文:《围城》中人情世情的体现及其描写方法(节选)
  15. UE4制作多语言游戏(本地化功能详解)
  16. Linux设备模型剖析系列一(基本概念、kobject、kset、kobj_type)
  17. python爬虫专家_Python爬虫入门教程:微医挂号网专家团队数据抓取pyspider
  18. html网页打不开二级网页,遇到二级网页打不开怎么办 讲解二级页面打不开的处理方法...
  19. unity 烘焙 光照贴图 以及一些灯光的相关问题(一)
  20. 提高网站访问速度的十个技巧

热门文章

  1. conda可以更改环境的python anaconda替换环境的Python
  2. 计算机应用基础模块3实操题正确答案,国开20秋计算机应用基础作业3 模块4 PowerPoint 2010实操题答案...
  3. oracle数据库双机热备原理,oracle数据库双机热备方案
  4. C语言_报数问题:有n个人围成一圈,顺序从零排号。从第一个人开始报数(从1到3报数),凡报到3的人 退出圈子,问最后留下的是原来第几号的那位。
  5. grid函数--Matplotlib
  6. 不简单的工厂:实际体验 .NET Core 2.1 新生物 HttpClientFactory
  7. 站内消息弹出层简单实现
  8. lamp搭建wordpress后升级安装主题,提示输入ftp账号密码
  9. Android 中 View的类关系图
  10. php创建文件目录,及删除目录和文件