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

给你一个下标从 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 ,这是所有可能情况中的最小删除次数。示例 2:输入:nums = [0,-4,19,1,8,-2,-3,5]
输出:3
解释:
数组中的最小元素是 nums[1] ,值为 -4 。
数组中的最大元素是 nums[2] ,值为 19 。
将最大值和最小值都移除需要从数组前面移除 3 个元素。
结果是 3 ,这是所有可能情况中的最小删除次数。 示例 3:输入:nums = [101]
输出:1
解释:
数组中只有这一个元素,那么它既是数组中的最小值又是数组中的最大值。
移除它只需要 1 次删除操作。

提示:

  • 1 <= nums.length <= 10510^5105
  • −105-10^5−105 <= nums[i] <= 10510^5105
  • nums 中的整数 互不相同

解题思路

  1. 统计最大值和最小值所在的下标,因为在这题中,哪个是最大值,哪个是最小值对题目并不影响,因此我们只需要知道左边极值的下标和右边极值的下标即可。
  2. 共有三种删除方法
  • 从数组的 前面 移除元素,直到把右边的极值移除
  • 从数组的 后面 移除元素,直到把左边的极值移除
  • 从数组的两边一齐移除元素,直到把左边和右边的极值移除

代码

class Solution {public:int minimumDeletions(vector<int>& nums) {int max_i(0),min_i(0),n=nums.size();for (int i = 1; i < nums.size(); ++i) {if (nums[i]>nums[max_i])max_i=i;if (nums[i]<nums[min_i])min_i=i;}int l=min(max_i,min_i),r=max(max_i,min_i);return min(l+1+n-r,min(r+1,n-l));}
};

5940. 从数组中移除最大值和最小值相关推荐

  1. LeetCode 2091. 从数组中移除最大值和最小值(一次遍历)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个下标从 0 开始的数组 nums ,数组由若干 互不相同 的整数组成. nums 中有一个值最小的元素和一个值最大的元素.分别称为 最小值 和 最 ...

  2. 如何获取NumPy数组中N个最大值的索引?

    本文翻译自:How do I get indices of N maximum values in a NumPy array? NumPy proposes a way to get the ind ...

  3. (c语言)编程输出二维数组中元素的最大值,要求用指针实现。

    (c语言)编程输出二维数组中元素的最大值,要求用指针实现. #include<stdio.h> #include<stdlib.h> #define N 6 //行数 #def ...

  4. code第一部分数组:从有序数组中移除重复的数据

    code第一部分数组:从有序数组中移除重复的数据 第二题 从有序数组中移除重复的数据,但是可以保留2个重复的数. For example, Given sorted array A = [1,1,1, ...

  5. 按如下函数原型编程从键盘输入一个m行n列的二维数组,然后计算数组中元素的最大值及其所在的行列下标值。其中,m和n的值由用户键盘输入。已知m和n的值都不超过10。

    题目:按如下函数原型编程从键盘输入一个m行n列的二维数组,然后计算数组中元素的最大值及其所在的行列下标值.其中,m和n的值由用户键盘输入.已知m和n的值都不超过10. void InputArray( ...

  6. python pop() ,如何在Python的列表或数组中移除元素

    python pop() ,如何在Python的列表或数组中移除元素 在本文中,你将学习如何使用Python内置的 pop() 方法,最后,你将知道如何使用 pop() 从 Python 中的列表中删 ...

  7. Python练习——二维数组中每行最大值和每行和

    Python练习--二维数组中每行最大值和每行和 求一个3*3二维数组中每行的最大值和每行的和. 输入格式: 在一行中输入9个小于100的整数,其间各以一个空格间隔 输出格式: 输出3行3列的二维数组 ...

  8. C语言数组练习-计算数组中元素的最大值及其所在的行列下标值

    要求:按如下函数原型编程从键盘输入一个m行n列的二维数组,然后计算数组中元素的最大值及其所在的行列下标值.其中m和n的值由用户键盘输入.已知m和n的值都不超过10. ----------------- ...

  9. 找出整形数组中的元素最大值。

    // 121218 第八章例8.4.cpp : 定义控制台应用程序的入口点. // /* * Copyright (c) 2012, 烟台大学计算机学院 * All rights reserved. ...

最新文章

  1. 新版蚂蚁网有抄袭怪兽吗?
  2. Linq to sql与EF零碎知识点总结
  3. Anaconda 查找安装的环境,以及移除旧环境命令
  4. P4313 文理分科 网络流
  5. java 6789的10000次方,用MSSQL计算2的10000次方
  6. java 图片转成base64编码_java语言中如何将一个图片转换为base64编码的数据呢?
  7. php网页源码学生请假考勤管理系统mysql数据库web结构html布局计算机软件工程
  8. ActionForm工作原理
  9. 魅族Android版本,魅族Flyme安卓版本
  10. 截止失真放大电路_模电必学基本放大电路
  11. 源码解析zxing条码边距及总宽度计算规则,附java使用zxing生成条形码,并去除条码两边空白
  12. 同花顺股票交易接口 正确用法
  13. Python PEP8 代码规范常见问题及解决方法
  14. 归并排序实现思想及代码模板
  15. 师生使用计算机不得,师生文明上网行为规范
  16. 用c语言编写程序,求∑(k=1~100)k+∑(k=1~50)k2,c语言程序,求(100∑k=1 k)+(50∑k=1 k^2)+(10∑k=1 1/k) 这...
  17. Note 7陨落下的骨诺牌效应,三星从此走向衰亡将韩国经济拖下悬崖?
  18. 新网站需要多少时间才有收录量?
  19. excel一列多行数据合并、一行多列合并
  20. Windows8 Metro快捷键 | Win8迷

热门文章

  1. SQL实现当前行等于前面两行数据之和
  2. #1123-JSP隐含对象
  3. Objective-C语言的动态性
  4. Linux网络配置:设置IP地址、网关DNS、主机名
  5. POJ2115 C Looooops(线性同余方程)
  6. 转载 - 最近对问题
  7. 如何获取UIWebView中全屏播放视频事件
  8. 《WinForm开发系列之控件篇》Item13 DirectoryEntry(暂无)
  9. 关于学力、同等学力与学历、同等学历的区别
  10. VC++中进程与多进程管理的方法[转]