• 魔法师

    力扣 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));
    }
    }

    主楼
  • Lvvvv

    可以归为简单题。```
    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});
    }
    };

    #1

发表回复

登录后回复