题目:
给你一个整数数组 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怎么就不对了呢????我不知道!!!