给你一个非负整数数组 nums
。在一步操作中,你必须:
- 选出一个正整数
x
,x
需要小于或等于nums
中 最小 的 非零 元素。 nums
中的每个正整数都减去x
。
返回使 nums
中所有元素都等于 0
需要的 最少 操作数。
示例 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 <= 100
0 <= nums[i] <= 100
方法一:哈希表去重
求去重后的非零元素个数。
时间复杂度
class Solution:
def minimumOperations(self, nums: List[int]) -> int:
s = {v for v in nums if v}
return len(s)
class Solution {
public int minimumOperations(int[] nums) {
Set<Integer> s = new HashSet<>();
for (int v : nums) {
if (v > 0) {
s.add(v);
}
}
return s.size();
}
}
class Solution {
public:
int minimumOperations(vector<int>& nums) {
unordered_set<int> s;
for (int v : nums)
if (v) s.insert(v);
return s.size();
}
};
func minimumOperations(nums []int) int {
s := map[int]bool{}
for _, v := range nums {
if v > 0 {
s[v] = true
}
}
return len(s)
}