출처 : https://leetcode.com/problems/make-array-zero-by-subtracting-equal-amounts/
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
.
class Solution {
public int minimumOperations(int[] nums) {
int answer = 0;
List<Integer> list = new ArrayList<>();
for (int n : nums) list.add(n);
while (true) {
int min = findMin(list);
answer++;
if (min == -1) {
answer--;
break;
}
int zeros = 0;
List<Integer> updated = new ArrayList<>();
for (int a = 0; a < list.size(); a++) {
if (list.get(a) != 0) updated.add(list.get(a) - min);
else {
updated.add(0);
zeros++;
}
}
if (zeros == nums.length) break;
list = new ArrayList<>(updated);
}
return answer;
}
public int findMin(List<Integer> l) {
List<Integer> list = new ArrayList<>();
for (int n : l) {
if (n != 0) list.add(n);
}
Collections.sort(list);
if (list.isEmpty()) return -1;
else return list.get(0);
}
}