从数组中移除最大值和最小值
给你一个下标从 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));
}
};