京东联盟建网站,阿里巴巴seo排名优化,常州专业网站建设公司哪家好,郑州设计院排名系列文章目录
【拒绝算法PUA】0x00-位运算 【拒绝算法PUA】0x01- 区间比较技巧 【拒绝算法PUA】0x02- 区间合并技巧 【拒绝算法PUA】0x03 - LeetCode 排序类型刷题 【拒绝算法PUA】LeetCode每日一题系列刷题汇总-2025年持续刷新中
C刷题技巧总结#xff1a; [温习C/C]0x04 刷…系列文章目录
【拒绝算法PUA】0x00-位运算 【拒绝算法PUA】0x01- 区间比较技巧 【拒绝算法PUA】0x02- 区间合并技巧 【拒绝算法PUA】0x03 - LeetCode 排序类型刷题 【拒绝算法PUA】LeetCode每日一题系列刷题汇总-2025年持续刷新中
C刷题技巧总结 [温习C/C]0x04 刷题基础编码技巧 文章目录 系列文章目录LeetCode 3065. 超过阈值的最少操作数 I链接题目解题方法1 (排序然后for循环判断)解题方法2(利用小顶堆优化) LeetCode 3065. 超过阈值的最少操作数 I
链接
3065. 超过阈值的最少操作数 I
题目
给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。一次操作中你可以删除 nums 中的最小元素。你需要使数组中的所有元素都大于或等于 k 请你返回需要的 最少 操作次数。示例 1输入nums [2,11,10,1,3], k 10
输出3
解释第一次操作后nums 变为 [2, 11, 10, 3] 。
第二次操作后nums 变为 [11, 10, 3] 。
第三次操作后nums 变为 [11, 10] 。
此时数组中的所有元素都大于等于 10 所以我们停止操作。
使数组中所有元素都大于等于 10 需要的最少操作次数为 3 。
示例 2输入nums [1,1,2,4,9], k 1
输出0
解释数组中的所有元素都大于等于 1 所以不需要对 nums 做任何操作。
示例 3输入nums [1,1,2,4,9], k 9
输出4
解释nums 中只有一个元素大于等于 9 所以需要执行 4 次操作。提示1 nums.length 50
1 nums[i] 109
1 k 109
输入保证至少有一个满足 nums[i] k 的下标 i 存在。解题方法1 (排序然后for循环判断)
#include iostream
#include vector
#include algorithmusing namespace std;class Solution {
public:int minOperations(vectorint nums, int k) {vectorint copy(nums.begin(), nums.end());std::sort(copy.begin(), copy.end(), std::lessint());int ans 0;int size nums.size();for (int i 0; i size; i) {if (copy[i] k) {ans i;break;}}return ans;}
};int main(int argc, char **argv) {vectorint vec {2, 11, 10, 1, 3};int k 10;Solution obj;int ret obj.minOperations(vec, k);cout ret endl;return 0;
}
输出
3解题方法2(利用小顶堆优化)
#include iostream
#include vector
#include algorithm
#include queueusing namespace std;class Solution {
public:struct cmp {bool operator()(int a, int b) {return a b; // 小顶堆}};int minOperations(vectorint nums, int k) {int ans 0;priority_queueint, vectorint, cmp pq(nums.begin(), nums.end());while (!pq.empty() pq.top() k) {pq.pop();}ans nums.size() - pq.size();return ans;}
};