LeetCode——2091. 从数组中移除最大值和最小值

通过万岁!!!

  • 题目:给你一个数组,然后把数组中的最大值和最小值给删掉。这里你可以理解为是一个双端队列进行移除,然后问你最少需要移除掉多少个元素。
  • 思路:第一步就是要先找到最大值的下标(maxIdx)和最小值的下标(minIdx),然后我们开始移除就好了。移除的方式有三种,一种是左边移除一部分,右边移除一部分;第二种是都从左边进行移除;第三种是都从右边进行移除。最终结果就是三种方式的最小值就好了。分别进行举例:
    • 第一种两边进行移除,直接来一个升序或者降序的数组就好了,那么结果就是从两边各移除一个元素,结果是2。这里需要注意因为我们知道了maxIdx和minIdx,所以在求结果的时候可以用length-abs(maxIdx-minIdx)+1。这里的绝对值是为了找到中间不需要删除的部分。这个+1,因为两边的元素都要移除,所以要+1,如果还是不理解,就找个demo试一下。
    • 第二种从左边进行移动,假设nums = {1, 10, 2, 3, 4, 5},那么结果就是max(maxIdx, minIdx)+1,这里+1是因为我们的下标是从0开始的。
    • 第三种从右边移动,假设nums = {2, 3, 4, 5, 1, 10},那么结果就是length-min(maxIdx, minIdx),这里不需要+1也是因为下标从0开始。
  • 技巧:数组遍历

java代码

java 复制代码
class Solution {
    public int minimumDeletions(int[] nums) {
        int max = nums[0], maxIdx = 0, min = nums[0], minIdx = 0;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] > max) {
                max = nums[i];
                maxIdx = i;
            }
            if (nums[i] < min) {
                min = nums[i];
                minIdx = i;
            }
        }
        int lr = nums.length - Math.abs(maxIdx - minIdx) + 1;
        int ll = Math.max(maxIdx, minIdx) + 1;
        int rr = nums.length - Math.min(maxIdx, minIdx);
        return Math.min(Math.min(lr, ll), rr);
    }
}
  • 总结:题目不是特别难,主要是理解三种情况。其实第一种是两个情况的组合,是最大值在左边和在右边的时候,所以这里需要注意下。
相关推荐
夜之眷属22 分钟前
Core dump 崩溃排查:JVM 宕机后,那份 core 文件怎么用 gdb 还原现场
java·运维·服务器·jvm
波加曼大王25 分钟前
# vLLM不要迷信PagedAttention神话,聊聊线上藏着的内部碎片陷阱
java·架构
SL_staff29 分钟前
目标健康度自检清单:开发者视角下的目标-计划-任务链路断点诊断
java·开源·github
A加ITIL教练长河achotsao29 分钟前
ITIL Master 战略领导者课后系列分享:AI编程正在重新划分研发与运维的边界
算法
hahaha601630 分钟前
FPGA+ARM实现AWB的全流程
人工智能·嵌入式硬件·算法·计算机视觉·fpga开发
李洱31 分钟前
LangChain 和 LangGraph 的区别:核心原理与使用场景
算法
for_ever_love__33 分钟前
MySQL 高频面试题 30 问:索引、事务、锁、日志、主从与分库分表(MySQL 8.0 版)
java·数据库·spring boot·mysql·spring cloud·面试·总结
夏幻灵33 分钟前
每日一题:LeetCode 206:反转链表——三指针与原地反转详解
算法·leetcode·链表
神仙别闹34 分钟前
基于C++实现的贪吃蛇游戏平台
java·c++·游戏
布吉岛的石头43 分钟前
Java 程序员第 49 阶段11:Java 接 BERT:用 ONNX Runtime 做句向量推理
java·人工智能·python·深度学习·bert·transformer