Open carloscn opened 1 year ago
pub fn minimum_operations(nums: Vec<i32>) -> i32
{
let mut ret:i32 = 0;
if nums.len() < 1 || (nums.len() == 1 && nums[0] == 0) {
return ret;
}
let mut input = nums.clone();
loop {
let min_value = input.iter().fold(i32::MAX, |mut min, x| {
if *x != 0 && *x < min {
min = *x;
}
min
});
let mut count_zero:usize = 0;
for i in 0..input.len() {
input[i] = (input[i] - min_value).max(0);
if input[i] == 0 {
count_zero += 1;
}
}
ret += 1;
if count_zero == nums.len() {
break;
}
}
return ret;
}
Description
You are given a non-negative integer array nums. In one operation, you must:
Choose a positive integer x such that x is less than or equal to the smallest non-zero element in nums. Subtract x from every positive element in nums. Return the minimum number of operations to make every element in nums equal to 0.
Example 1:
Input: nums = [1,5,0,3,5] Output: 3 Explanation: In the first operation, choose x = 1. Now, nums = [0,4,0,2,4]. In the second operation, choose x = 2. Now, nums = [0,2,0,0,2]. In the third operation, choose x = 2. Now, nums = [0,0,0,0,0].
Example 2:
Input: nums = [0] Output: 0 Explanation: Each element in nums is already 0 so no operations are needed.
Constraints:
1 <= nums.length <= 100 0 <= nums[i] <= 100