comments | difficulty | edit_url | rating | source | tags | ||
---|---|---|---|---|---|---|---|
true |
Easy |
1382 |
Biweekly Contest 145 Q1 |
|
You are given an integer array nums
and an integer k
.
An integer h
is called valid if all values in the array that are strictly greater than h
are identical.
For example, if nums = [10, 8, 10, 8]
, a valid integer is h = 9
because all nums[i] > 9
are equal to 10, but 5 is not a valid integer.
You are allowed to perform the following operation on nums
:
- Select an integer
h
that is valid for the current values innums
. - For each index
i
wherenums[i] > h
, setnums[i]
toh
.
Return the minimum number of operations required to make every element in nums
equal to k
. If it is impossible to make all elements equal to k
, return -1.
Example 1:
Input: nums = [5,2,5,4,5], k = 2
Output: 2
Explanation:
The operations can be performed in order using valid integers 4 and then 2.
Example 2:
Input: nums = [2,1,2], k = 2
Output: -1
Explanation:
It is impossible to make all the values equal to 2.
Example 3:
Input: nums = [9,7,5,3], k = 1
Output: 4
Explanation:
The operations can be performed using valid integers in the order 7, 5, 3, and 1.
Constraints:
1 <= nums.length <= 100
1 <= nums[i] <= 100
1 <= k <= 100
class Solution:
def minOperations(self, nums: List[int], k: int) -> int:
s = set()
mi = inf
for x in nums:
if x < k:
return -1
mi = min(mi, x)
s.add(x)
return len(s) - int(k == mi)
class Solution {
public int minOperations(int[] nums, int k) {
Set<Integer> s = new HashSet<>();
int mi = 1 << 30;
for (int x : nums) {
if (x < k) {
return -1;
}
mi = Math.min(mi, x);
s.add(x);
}
return s.size() - (mi == k ? 1 : 0);
}
}
class Solution {
public:
int minOperations(vector<int>& nums, int k) {
unordered_set<int> s;
int mi = INT_MAX;
for (int x : nums) {
if (x < k) {
return -1;
}
mi = min(mi, x);
s.insert(x);
}
return s.size() - (mi == k);
}
};
func minOperations(nums []int, k int) int {
mi := 1 << 30
s := map[int]bool{}
for _, x := range nums {
if x < k {
return -1
}
s[x] = true
mi = min(mi, x)
}
if mi == k {
return len(s) - 1
}
return len(s)
}
function minOperations(nums: number[], k: number): number {
const s = new Set<number>();
let mi = Infinity;
for (const x of nums) {
if (x < k) {
return -1;
}
s.add(x);
mi = Math.min(mi, x);
}
return s.size - (mi === k ? 1 : 0);
}