力扣第 284 场周赛 :K 次操作后最大顶端元素

简介: 给你一个下标从 0 开始的整数数组 nums ,它表示一个 栈 ,其中 nums[0] 是栈顶的元素。

7.png

一、问题描述


给你一个下标从 0 开始的整数数组 nums ,它表示一个 ,其中 nums[0] 是栈顶的元素。


每一次操作中,你可以执行以下操作 之一

  • 如果栈非空,那么 删除 栈顶端的元素。
  • 如果存在 1 个或者多个被删除的元素,你可以从它们中选择任何一个,添加 回栈顶,这个元素成为新的栈顶元素。


同时给你一个整数 k ,它表示你总共需要执行操作的次数。


请你返回 恰好 执行 k 次操作以后,栈顶元素的 最大值 。如果执行完 k 次操作以后,栈一定为空,请你返回 -1


题目链接:K 次操作后最大顶端元素


二、题目要求


样例

输入:nums= [5,2,2,4,0,6], k=4输出:5解释:4次操作后,栈顶元素为5的方法之一为:-1次操作:删除栈顶元素5,栈变为 [2,2,4,0,6] -2次操作:删除栈顶元素2,栈变为 [2,4,0,6] -3次操作:删除栈顶元素2,栈变为 [4,0,6] -4次操作:将5添加回栈顶,栈变为 [5,4,0,6] 注意,这不是最后栈顶元素为5的唯一方式。但可以证明,4次操作以后5是能得到的最大栈顶元素。


考察

贪心模拟
建议用时15~35min


三、问题分析

这一题要试着去理解,最大的顶端元素你事先是不知道在哪的,并且也不确定K次操作能否达到。

5.png

正如《阿甘正传》所说:“人生就像一盒巧克力,你永远不知道下一块是什么味道。”


这题我们要试着在允许的操作步数内,寻找到最大的元素。为了增加成功的概率,删除栈顶元素个数要尽可能多,逐步向后遍历。而在遍历的过程中也不能忽略,定义m保存删除元素中最大的,留着后续比较。


K次操作,那我们K-1次进行删除,遍历尽可能多的元素。


最后一次操作时,有两种选择:一种是选取之前删除的最大元素,另一种是在删除一个元素取栈顶元素。

两种比较一下,谁最大就行。


特殊情况:

当元素个数只有一个时,如果操作数为奇数,那么无法输出元素,只能输出-1。
假如操作数大于元素个数,那么只需要完全遍历数组寻找最大值就行


四、编码实现


classSolution {
public:
intmaximumTop(vector<int>&nums, intk) {
inti,n=nums.size(),m=0;//初始化操作if(n==1&&k%2==1)//特殊情况,返回-1return-1;
for(i=0;i<k-1&&i<n;i++)//k-1次删除操作        {
m=max(m,nums[i]);
        }
if(k<n)//最后一次选择操作m=max(m,nums[k]);//输出结果returnm;  
    }
};

五、测试结果6.png

相关文章
|
4月前
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
48 1
|
4月前
【LeetCode 27】347.前k个高频元素
【LeetCode 27】347.前k个高频元素
48 0
|
4月前
【LeetCode 06】203.移除链表元素
【LeetCode 06】203.移除链表元素
40 0
|
4月前
【LeetCode-每日一题】移除元素
【LeetCode-每日一题】移除元素
39 0
|
6月前
|
存储 算法
LeetCode第83题删除排序链表中的重复元素
文章介绍了LeetCode第83题"删除排序链表中的重复元素"的解法,使用双指针技术在原链表上原地删除重复元素,提供了一种时间和空间效率都较高的解决方案。
LeetCode第83题删除排序链表中的重复元素
|
6月前
|
算法 索引
LeetCode第34题在排序数组中查找元素的第一个和最后一个位置
这篇文章介绍了LeetCode第34题"在排序数组中查找元素的第一个和最后一个位置"的解题方法,通过使用双指针法从数组两端向中间同时查找目标值,有效地找到了目标值的首次和最后一次出现的索引位置。
LeetCode第34题在排序数组中查找元素的第一个和最后一个位置
|
6月前
|
Python
【Leetcode刷题Python】剑指 Offer II 082. 含有重复元素集合的组合
解决LeetCode平台《剑指 Offer II 082. 含有重复元素集合的组合》题目的Python代码实现,通过深度优先搜索算法找出所有和为特定目标值的数字组合,并在搜索过程中通过排序和跳过重复元素来避免解集中出现重复组合。
46 2
|
6月前
|
算法
LeetCode第27题移除元素
这篇文章介绍了LeetCode第27题"移除元素"的解题方法,通过使用双指针技巧,有效移除数组中特定值的元素并返回新数组的长度。
|
6月前
|
算法 索引 Python
【Leetcode刷题Python】34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)
解决LeetCode "在排序数组中查找元素的第一个和最后一个位置" 问题的方法。第一种方法是使用两次二分查找,首先找到目标值的最左边界,然后找到最右边界。第二种方法是利用Python的list.index()方法,先正序找到起始位置,再逆序找到结束位置,并给出了两种方法的Python实现代码。
77 0
|
6月前
|
Python
【Leetcode刷题Python】203.移除链表元素
文章提供了三种删除链表中特定值节点的方法:迭代法、虚拟节点迭代删除法和递归法,并给出了相应的Python实现代码。
33 0