力扣随机一题之2148.元素计数

力扣随机一题之2148.元素计数

题目:

给你一个整数数组 nums ,统计并返回在 nums 中同时至少具有一个严格较小元素和一个严格较大元素的元素数目。

示例 1:
输入:nums = [11,7,2,15]
输出:2
解释:元素 7 :严格较小元素是元素 2 ,严格较大元素是元素 11 。
元素 11 :严格较小元素是元素 7 ,严格较大元素是元素 15 。
总计有 2 个元素都满足在 nums 中同时存在一个严格较小元素和一个严格较大元素。

示例 2:
输入:nums = [-3,3,3,90]
输出:2
解释:元素 3 :严格较小元素是元素 -3 ,严格较大元素是元素 90 。
由于有两个元素的值为 3 ,总计有 2 个元素都满足在 nums 中同时存在一个严格较小元素和一个严格较大元素。

过程记录:

一开始当做是找出数组中的最大最小值来做,于是就直接使用了冒泡排序的思路进行逐个比较,一口气写了一大通,结果屁用没有。
之后发现读题错误后开始了另一个错误:
确定数组内存在最大值和最小值后直接把numsize - 2就得到了sum
“但是这个错在哪儿我也不知道。从结果来说应该是没有问题的才对()”
一开始并未采用fmax()和fmin()函数,而是自己写循环来完成功能。可能也因为这个,一开始的代码运行超时了。所以在参考下改成了直接使用fmax和fmin函数。
最后采用的是:对数组内每个元素进行判断,判断其是否在minor与major中间

代码:

int countElements(int* nums, int numsSize){
    int i = 0;
    int major = nums[0];
    int minor = nums[0];
    int loop;
    int sum = 0;
    while(i < numsSize)
    {
        major = fmax(major , nums[i]);
        minor = fmin(minor , nums[i]);
        i = i + 1;
    }
    for(loop = 0; loop < numsSize; loop++)
    {
        if(nums[loop] < major && nums[loop] > minor)
        {
            sum = sum + 1;
        }
    }
    return sum;
}

总结:

1、好好读题!不要急着写代码,先理思路。
2、fmax(a,b)和fmin(a,b)是在math.h里面的函数。在有需要时可以直接用,不一定要完全手写完成功能。
3、思考怎么从更简单的角度去解决问题。面向结果编程不是一件坏事(大概?),比如sum -2怎么就不对了呢????我不知道!!!

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值