leetcode第 269 场周赛————2091. 从数组中移除最大值和最小值

该博客讨论了如何在数组中移除最大值和最小值所需的最小删除次数。通过分析三种不同的删除策略——从两侧删除、从左侧删除到第二个最值以及从右侧删除到第一个最值,找到最优解。示例展示了具体操作,并给出了解决方案的代码实现。
摘要由CSDN通过智能技术生成

从数组中移除最大值和最小值

给你一个下标从 0 开始的数组 nums ,数组由若干 互不相同 的整数组成。

nums 中有一个值最小的元素和一个值最大的元素。分别称为 最小值 和 最大值 。你的目标是从数组中移除这两个元素。

一次 删除 操作定义为从数组的 前面 移除一个元素或从数组的 后面 移除一个元素。

返回将数组中最小值和最大值 都 移除需要的最小删除次数。

示例 1:

输入:nums = [2,10,7,5,4,1,8,6]
输出:5
解释:
数组中的最小元素是 nums[5] ,值为 1 。
数组中的最大元素是 nums[1] ,值为 10 。
将最大值和最小值都移除需要从数组前面移除 2 个元素,从数组后面移除 3 个元素。
结果是 2 + 3 = 5 ,这是所有可能情况中的最小删除次数。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/removing-minimum-and-maximum-from-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解

有三种删除方法:一是左右两边删除到最值,二是从左边删除到第二个最值,三是从右边删除到第一个最值
求三种方法的删除次数最小

class Solution {
public:
/*

*/
    int minimumDeletions(vector<int>& nums) {
        int n = nums.size();
        int minNum,maxNum,minIndex,maxIndex;
        minNum = maxNum = nums[0];  //初始化为第一个值
        minIndex = maxIndex = 0;
        for(int i=0; i<nums.size(); ++i){
            if(minNum > nums[i]){
                minNum = nums[i];
                minIndex = i;
            }
            if(maxNum < nums[i]){
                maxNum = nums[i];
                maxIndex = i;
            }
        }
        int l , r;
        l = min(minIndex,maxIndex);
        r = max(minIndex,maxIndex);
        return min(l+1+n-r, min(r+1, n-l));
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

葛济维的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值