1、剑指 Offer 29. 顺时针打印矩阵
2、321、拼接最大数
第2题大神的题解:Java 拆分子问题 合并求解
做点笔记:
大致思路:
- 假设最终结果有count个数(介于0~k之间)字在nums1中,那么有(k-count)个数字在nums2中,最外层循环遍历0到count的情况。不一定从0开始,若nums2个数不足k个,则从(k-nums2.length)开始。同样,不一定在count结束,若nums1个数不足k个,则在nums1.length结束。
- 分别从nums1、nums2取最大子序列。可以借助栈来获取最大子序列,注意只有当数组剩余元素多余栈中剩余空间时,才能将栈中较小的元素出栈。
- 合并两个子序列组成一个序列。可以借助双指针从头递进比较序列元素大小,注意比较时不能仅比较当前索引出元素,需按大数比较。
- 比较合并后序列的大小是否大于已缓存的答案序列的大小,取大的作为答案序列。
- 作者:chidehang
链接:https://leetcode-cn.com/problems/create-maximum-number/solution/java-chai-fen-zi-wen-ti-he-bing-qiu-jie-by-chideha/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
根据大神的思路再解释一下关键点:
(1)分别求两个序列的最大子序列。
(2)序列num1中最大子序列长度为w,则num2中最大子序列长度为k-w。第一层循环遍历w的所有取值。w的取值为:Math.max(0,k-num2.length) ≤ w ≤ Math.min(k,num1.length)。
(3)用两个指针分别对应两个子序列进行合并。(我已开始还想复杂了,我还想用归并排序来着)
这篇博客主要解析了虾皮笔试中的两道题目,包括剑指 Offer 29 - 顺时针打印矩阵和321拼接最大数。针对第二题,博主详细介绍了利用Java解决的最大子序列合并策略,通过栈来获取最大子序列,并使用双指针合并两个子序列,以找到最大数。博客强调了在确定子序列长度和合并过程中的关键点。
&spm=1001.2101.3001.5002&articleId=107499177&d=1&t=3&u=3bd311ac74b24fb2895920e45c7fa0c6)
1145

被折叠的 条评论
为什么被折叠?



