- 魔法师2026-08-3013093
力扣 LeetCode

2091. 从数组中移除最大值和最小值 - 力扣(LeetCode)
2091. 从数组中移除最大值和最小值 - 给你一个下标从 0 开始的数组 nums ,数组由若干 互不相同 的整数组成。
nums 中有一个值最小的元素和一个值最大的元素。分别称为 最小值 和 最大值 。你的目标是从数组中移除这两个元素。
一次 删除 操作定义为从数组的 前面 移除一个元素或从数组的 后面 移除一个元素。
返回将数组中最小值和最大值 都 移除需要的最小删除次数。
示例 1:
输入:nums =...
思路
今天的题应该算简单题。最优的可能删除方式只有三种,只从左边删、只从右边删、从两头删。
所以只要找到最小值和最大值的坐标,然后从以上三种方式中找最优的即可。
代码```
class Solution {
public int minimumDeletions(int[] nums) {
int n = nums.length;
int idxMn = 0, idxMx = 0;
int mn = nums[0], mx = nums[0];
for (int i = 1; i < n; i++) {
if (nums[i] < mn) {
idxMn = i;
mn = nums[i];
}
if (nums[i] > mx) {
idxMx = i;
mx = nums[i];
}
}
int left = Math.min(idxMn, idxMx);
int right = Math.max(idxMn, idxMx);
return Math.min(left + 1 + n - right, Math.min(right + 1, n - left));
}
}主楼 - Lvvvv2026-08-3017266
可以归为简单题。```
class Solution {
public:
int minimumDeletions(vector<int>& nums) {
int pmax = 0, pmin = 0;
int n = nums.size();
for(int i = 0; i < n; i++) {
if(nums[i] > nums[pmax]) {
pmax = i;
} else if(nums[i] < nums[pmin]) {
pmin = i;
}
}
if(pmin == pmax) {
return 1;
} else if(pmin > pmax) {
swap(pmin,pmax);
}
return min({pmin + 1 + n - pmax,pmax + 1,n - pmin});
}
};