返回介绍

solution / 2000-2099 / 2091.Removing Minimum and Maximum From Array / README_EN

发布于 2024-06-17 01:03:10 字数 4958 浏览 0 评论 0 收藏 0

2091. Removing Minimum and Maximum From Array

中文文档

Description

You are given a 0-indexed array of distinct integers nums.

There is an element in nums that has the lowest value and an element that has the highest value. We call them the minimum and maximum respectively. Your goal is to remove both these elements from the array.

A deletion is defined as either removing an element from the front of the array or removing an element from the back of the array.

Return _the minimum number of deletions it would take to remove both the minimum and maximum element from the array._

 

Example 1:

Input: nums = [2,10,7,5,4,1,8,6]
Output: 5
Explanation: 
The minimum element in the array is nums[5], which is 1.
The maximum element in the array is nums[1], which is 10.
We can remove both the minimum and maximum by removing 2 elements from the front and 3 elements from the back.
This results in 2 + 3 = 5 deletions, which is the minimum number possible.

Example 2:

Input: nums = [0,-4,19,1,8,-2,-3,5]
Output: 3
Explanation: 
The minimum element in the array is nums[1], which is -4.
The maximum element in the array is nums[2], which is 19.
We can remove both the minimum and maximum by removing 3 elements from the front.
This results in only 3 deletions, which is the minimum number possible.

Example 3:

Input: nums = [101]
Output: 1
Explanation:  
There is only one element in the array, which makes it both the minimum and maximum element.
We can remove it with 1 deletion.

 

Constraints:

  • 1 <= nums.length <= 105
  • -105 <= nums[i] <= 105
  • The integers in nums are distinct.

Solutions

Solution 1

class Solution:
  def minimumDeletions(self, nums: List[int]) -> int:
    mi = mx = 0
    for i, num in enumerate(nums):
      if num < nums[mi]:
        mi = i
      if num > nums[mx]:
        mx = i
    if mi > mx:
      mi, mx = mx, mi
    return min(mx + 1, len(nums) - mi, mi + 1 + len(nums) - mx)
class Solution {
  public int minimumDeletions(int[] nums) {
    int mi = 0, mx = 0, n = nums.length;
    for (int i = 0; i < n; ++i) {
      if (nums[i] < nums[mi]) {
        mi = i;
      }
      if (nums[i] > nums[mx]) {
        mx = i;
      }
    }
    if (mi > mx) {
      int t = mx;
      mx = mi;
      mi = t;
    }
    return Math.min(Math.min(mx + 1, n - mi), mi + 1 + n - mx);
  }
}
class Solution {
public:
  int minimumDeletions(vector<int>& nums) {
    int mi = 0, mx = 0, n = nums.size();
    for (int i = 0; i < n; ++i) {
      if (nums[i] < nums[mi]) mi = i;
      if (nums[i] > nums[mx]) mx = i;
    }
    if (mi > mx) {
      int t = mi;
      mi = mx;
      mx = t;
    }
    return min(min(mx + 1, n - mi), mi + 1 + n - mx);
  }
};
func minimumDeletions(nums []int) int {
  mi, mx, n := 0, 0, len(nums)
  for i, num := range nums {
    if num < nums[mi] {
      mi = i
    }
    if num > nums[mx] {
      mx = i
    }
  }
  if mi > mx {
    mi, mx = mx, mi
  }
  return min(min(mx+1, n-mi), mi+1+n-mx)
}
function minimumDeletions(nums: number[]): number {
  const n = nums.length;
  if (n == 1) return 1;
  let i = nums.indexOf(Math.min(...nums));
  let j = nums.indexOf(Math.max(...nums));
  let left = Math.min(i, j);
  let right = Math.max(i, j);
  // 左右 left + 1 + n - right
  // 两个都是左边 left + 1 + right - left = right + 1
  // 都是右边 n - right + right - left = n - left
  return Math.min(left + 1 + n - right, right + 1, n - left);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文