240428.LeetCode——3065.超过阈值的最少操作数I

问题描述

给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。

一次操作中,你可以删除 nums 中的最小元素。

你需要使数组中的所有元素都大于或等于 k ,请你返回需要的 最少 操作次数。

EX1.

46e074affb8a4cc9add7dee052b0f87b.jpg

 

EX2.

3a5452be362a4055bd8629bd5825de87.jpg

 

EX3.

536101718c5442438e5f7fbeea8bb03d.jpg

 代码实现

 

C语言I(老年痴呆复杂版/老实人板)

int minOperations(int* nums, int numsSize, int k)

{
    int i,j;
    int cnt=0;//定义计数器,表示操作次数
    int min;//最小值
    int min_index;//最小值下标
    for(i=0;i<numsSize;i++)//外层循环:执行numsSize轮
    {
        min=nums[0];
        min_index=0;
        for(j=0;j<numsSize;j++)//内层循环:每次外层循环时,通过内层遍历找出一个最小值
        {
            if(nums[j]<min)
            {
                min=nums[j];
                min_index=j;
            }
        }
        if(min<k)//若该轮内层循环遍历找出的最小值小于k,
        {
            nums[min_index]=k;//那么赋新值为k,使其下一轮循环不会被找出
            cnt++;//操作数加一
        }
    }
    return cnt;//返回计数器=操作次数
}

 

C语言II(简单技巧版)

int minOperations(int* nums, int numsSize, int k) 
{
    int i;
    int cnt=0;
    for(i=0;i<numsSize;i++)//只需一层循环遍历数组,不用定义各种无用变量
    {
        if(nums[i]<k)
        {
            cnt++;//cnt表示数组中有多少小于k的元素
        }
    }
    return cnt;//返回计数器=操作次数
}

 

总结

       可能是对力扣的恐惧吧,加上之前看的题解都是几十上百行代码,总认为力扣的题目很难,我现在的刷题顺序其实是筛选:算法:通过率降序;目前是第三题。

       初看的时候以为蛮难的,被示例输出误导了,因为每轮之后的数组大小都不一样,甚至还以为要用到动态数组规划、冒泡排序等等......后面发现想多了,用几个变量就行(甚至后面发现练几个变量都不用,一轮循环遍历就行),上面的C语言I是我自己想的,感觉还是有了做题思维了......有时候思维没有跳转,对于输出和输入和实现过程的关系没有把握清楚。

       这道题的实现还是很简单的,所以给我的启示就是,还是得对于想思路的时间和代码时间还是要好好权衡......好的思路可以大大减少代码时间,但光思考不开始写也没办法想出更好的思路,我觉得这一点应该无论在学校还是以后去企业都很重要。

       (btw:期中考试终于结束了!可以好好码代码(掉头发bushi)了)

 

 

 

 

 

  • 28
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值