2357. 使数组中所有元素都等于零
难度:easy\color{Green}{easy}easy
题目描述
给你一个非负整数数组 numsnumsnums 。在一步操作中,你必须:
- 选出一个正整数 xxx ,xxx 需要小于或等于 numsnumsnums 中 最小 的 非零 元素。
- numsnumsnums 中的每个正整数都减去 xxx。
返回使 numsnumsnums 中所有元素都等于 000 需要的 最少 操作数。
示例 1:
输入:nums = [1,5,0,3,5]
输出:3
解释:
第一步操作:选出 x = 1 ,之后 nums = [0,4,0,2,4] 。
第二步操作:选出 x = 2 ,之后 nums = [0,2,0,0,2] 。
第三步操作:选出 x = 2 ,之后 nums = [0,0,0,0,0] 。
示例 2:
输入:nums = [0]
输出:0
解释:nums 中的每个元素都已经是 0 ,所以不需要执行任何操作。
提示:
- 1<=nums.length<=1001 <= nums.length <= 1001<=nums.length<=100
- 0<=nums[i]<=1000 <= nums[i] <= 1000<=nums[i]<=100
算法
(模拟)
找到去重后数组第一个非 0
位置的下标,以及最后一个数字的下标,两者中间的差值就是所求的答案。
复杂度分析
-
时间复杂度:O(n)O(n)O(n),其中 nnn 是数组的长度。
-
空间复杂度 : O(1)O(1)O(1)
C++ 代码
class Solution {
public:int minimumOperations(vector<int>& nums) {//排序sort(nums.begin(), nums.end());//去重int n = unique(nums.begin(), nums.end()) - nums.begin();//判断特殊情况if (nums[n - 1] == 0) return 0;int i = 0;//找到第一个非0的下标while (nums[i] == 0) i ++;//计算答案int ans = n - i;return ans; }
};