【Leetcode 每日一题】3375. 使数组的值全部为 K 的最少操作次数

问题背景

给你一个整数数组 numsnumsnums 和一个整数 kkk
如果一个数组中所有 严格大于 hhh 的整数值都 相等 ,那么我们称整数 hhh合法的
比方说,如果 nums=[10,8,10,8]nums = [10, 8, 10, 8]nums=[10,8,10,8],那么 h=9h = 9h=9 是一个 合法 整数,因为所有满足 nums[i]>9nums[i] > 9nums[i]>9 的数都等于 101010,但是 555 不是 合法 整数。
你可以对 numsnumsnums 执行以下操作:

  1. 选择一个整数 hhh,它对于 当前 numsnumsnums 中的值是合法的。
  2. 对于每个下标 iii,如果它满足 nums[i]>hnums[i] > hnums[i]>h,那么将 nums[i]nums[i]nums[i] 变为 hhh

你的目标是将 numsnumsnums 中的所有元素都变为 kkk,请你返回 最少 操作次数。如果无法将所有元素都变 kkk,那么返回 −1-11

数据约束

  • 1≤nums.length≤1001 \le nums.length \le 1001nums.length100
  • 1≤nums[i]≤1001 \le nums[i] \le 1001nums[i]100
  • 1≤k≤1001 \le k \le 1001k100

解题过程

题目表述很复杂,实际上就是求大于目标值的不同元素种类数量。
需要注意的是,如果出现小于目标值的元素,那么就应当返回 −1-11

具体实现

class Solution {
    public int minOperations(int[] nums, int k) {
        int[] count =  new int[110];
        int res = 0;
        for (int num : nums) {
            if (num < k) {
                return -1;
            }
            if (num > k && ++count[num] == 1) { 
                res++;
            }
        }
        return res;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值