数组、区间比较[5940] 从数组中移除最大值和最小值

// 5940. 从数组中移除最大值和最小值
class Solution {
    public int minimumDeletions(int[] nums) {
        // 只有一个元素时直接返回1
        if(nums.length <= 1)
            return 1;
        
        // 因为为最小值所以直接将初始值设置为int的最大值
        int ans = Integer.MAX_VALUE;

        // minInd, minVal: 最小值的下标,最小值的大小,默认给int的最大值
        // maxInd, maxVal: 最大值的下标,最大值的大小,默认给int的最小值
        int minInd = 0, minVal = Integer.MAX_VALUE, maxInd = 0, maxVal = Integer.MIN_VALUE;
        
        // 遍历数组获取最小值、最大值的下标和大小
        // 这里nums中无重复的元素
        for(int i = 0; i < nums.length; i++){
            // 由于已经给了默认值,所以需要将下面两个if分开,否则会出错
            if(minVal >= nums[i]){
                // 设置最小值
                minInd = i;
                minVal = nums[i];
            }

            if(maxVal <= nums[i]) {
                // 设置最大值
                maxInd = i;
                maxVal = nums[i];
            }
        }
        
        // 保证minInd 指向左边,maxInd指向右边,相对最大最小值来说
        if(minInd > maxInd){
            int tmp = minInd;
            minInd = maxInd; 
            maxInd = tmp;
        }
        
        // 这里分三种情况
        // 1.[0,minInd],[minInd, maxInd]
        ans = (int)Math.min(ans, (minInd + 1) + (maxInd - minInd));

        // 2.[0,minInd],[maxInd, nums.length - 1]    
        ans = (int)Math.min(ans, (minInd + 1) + (nums.length - maxInd));

        // 3.[minInd, maxInd],[maxInd, nums.length - 1] 
        ans = (int)Math.min(ans, (maxInd - minInd) + (nums.length - maxInd));
        
        return ans;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值