Welcome to Subscribe On Youtube
Formatted question description: https://leetcode.ca/all/2357.html
2357. Make Array Zero by Subtracting Equal Amounts
- Difficulty: Easy.
- Related Topics: Array, Hash Table, Sorting, Heap (Priority Queue), Simulation.
- Similar Questions: Contains Duplicate.
Problem
You are given a non-negative integer array nums
. In one operation, you must:
-
Choose a positive integer
x
such thatx
is less than or equal to the smallest non-zero element innums
. -
Subtract
x
from every positive element innums
.
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
Solution (Java, C++, Python)
-
class Solution { public int minimumOperations(int[] nums) { Set<Integer> set = new HashSet<>(); for (int a : nums) { if (a > 0) { set.add(a); } } return set.size(); } } ############ class Solution { public int minimumOperations(int[] nums) { boolean[] s = new boolean[101]; s[0] = true; int ans = 0; for (int x : nums) { if (!s[x]) { ++ans; s[x] = true; } } return ans; } }
-
class Solution: def minimumOperations(self, nums: List[int]) -> int: s = {v for v in nums if v} return len(s) ############ # 2357. Make Array Zero by Subtracting Equal Amounts # https://leetcode.com/problems/make-array-zero-by-subtracting-equal-amounts class Solution: def minimumOperations(self, nums: List[int]) -> int: return len(set([x for x in nums if x != 0]))
-
class Solution { public: int minimumOperations(vector<int>& nums) { bool s[101]{}; s[0] = true; int ans = 0; for (int& x : nums) { if (!s[x]) { ++ans; s[x] = true; } } return ans; } };
-
func minimumOperations(nums []int) (ans int) { s := [101]bool{true} for _, x := range nums { if !s[x] { s[x] = true ans++ } } return }
-
function minimumOperations(nums: number[]): number { const set = new Set(nums); set.delete(0); return set.size; }
-
use std::collections::HashSet; impl Solution { pub fn minimum_operations(nums: Vec<i32>) -> i32 { let mut set = nums.iter().collect::<HashSet<&i32>>(); set.remove(&0); set.len() as i32 } }
Explain:
nope.
Complexity:
- Time complexity : O(n).
- Space complexity : O(n).