// 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;
}
}
数组、区间比较[5940] 从数组中移除最大值和最小值
最新推荐文章于 2023-01-10 18:16:50 发布