尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

leetcode 2091. 从数组中移除最大值和最小值 中等

leetcode 2091. 从数组中移除最大值和最小值 中等 给你一个下标从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 10^5-10^5 nums[i] 10^5nums中的整数互不相同分析由于 nums 中的整数都互不相同因此只有一个最大值和最小值先遍历数组分别找到最大值和最小值的位置。因为只要计算移除次数所以不需要知道最大值和最小值哪个在前哪个在后不妨设两个最值的位置为 max_pos 和 min_pos其中 max_pos min_pos。移除方式总共有三种1、移除掉 [0,max_pos]2、移除掉 [min_pos,n)3、移除掉 [0,min_pos] 和 [max_pos,n)。分别计算三种移除方式需要的操作次数取较小值即可。class Solution { public: int minimumDeletions(vectorint nums) { int max_val,max_pos,min_val,min_pos,nnums.size(); max_valmin_valnums[0],max_posmin_pos0; for(int i1;in;i) { if(nums[i]max_val)max_valnums[i],max_posi; if(nums[i]min_val)min_valnums[i],min_posi; } if(max_posmin_pos)swap(max_pos,min_pos); return min(min(max_pos1,n-min_pos),min_pos1n-max_pos); } };
返回列表