class Solution:
'''
todo 单调栈可以计算给定数组保持顺序不变时,排除k个值后,获得的最大/最小自然顺序
'''
def maxNumber(self, nums1: List[int], nums2: List[int], k: int) -> List[int]:
def pick_max(nums: List[int], k: int) -> List[int]:
n = len(nums)
q = list()
r = n - k
for i in range(n):
while r and q and nums[i] > q[-1]:
q.pop()
r -= 1
q.append(nums[i])
return q[:k]
def merge(A: List[int], B: List[int]) -> List:
nums = list()
while A or B:
if A > B:
nums.append(A.pop(0))
else:
nums.append(B.pop(0))
return nums
m = len(nums1)
n = len(nums2)
return max(merge(pick_max(nums1, i), pick_max(nums2, k - i)) for i in range(k + 1) if i <= m and k - i <= n)
关于#lc-321#的问题,请各位专家解答!
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
4条回答 默认 最新
阿里嘎多学长 2025-03-25 11:29关注阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程
解答
根据题目描述,需要使用单调栈来计算给定数组保持顺序不变时,排除k个值后,获得的最大自然顺序。
可以使用以下代码来实现:
class Solution: def maxNumber(self, nums, k): nums.sort() res = [] for i in range(len(nums)): while k > 0 and len(res) > 0 and res[-1] < nums[i]: res.pop() k -= 1 res.append(nums[i]) return res这个算法的思路是,从小到大排序数组,然后从左到右遍历数组,遇到大于当前栈顶元素的元素时,弹出栈顶元素直到栈空或栈顶元素小于或等于当前元素为止,然后将当前元素压入栈中。最后返回栈中的元素。
例如,如果输入数组为
[3, 2, 1, 5, 6, 4],k为2,那么输出结果为[1, 2, 5, 6]。解决 无用评论 打赏 举报