本篇博客会讲解力扣“2733. 既不是最小值也不是最大值”的解题思路,这是题目链接。
本题的思路是:
- 如果数组只有两个元素,直接返回任意一个即可。
- 如果数组有三个或以上的元素,由于数组中的所有数字互不相同,我们只需要找出前三个元素中的中间值即可。所以,问题转化为:如何从三个互不相同的整数中找出中间值?
我们可以实现一个函数GetMid,用于完成这个操作。具体的思路是:
- 假设三个数分别是a、b、c。
- 如果a>b,那么:
- 如果b>c,那么中间值是b。
- 如果c>a,那么中间值是a。
- 否则,中间值是c。
- 如果b>a,那么:
- 如果a>c,那么中间值是a。
- 如果c>b,那么中间值是b。
- 否则,中间值是c。
完整代码如下:
int GetMid(int a, int b, int c)
{
if (a > b)
{
if (b > c)
{
return b;
}
else if (c > a)
{
return a;
}
else
{
return c;
}
}
else // b > a
{
if (a > c)
{
return a;
}
else if (c > b)
{
return b;
}
else
{
return c;
}
}
}
int findNonMinOrMax(int* nums, int numsSize){
if (numsSize <= 2)
return -1;
// 返回前3个数字排中间的数
return GetMid(nums[0], nums[1], nums[2]);
}
力扣竟然显示“你的代码真是无敌了!”,这还是第一次见。
总结
- 首先,将问题转化为求前三个数的中间值问题。
- 然后,根据不同的情况,确定中间值。
感谢大家的阅读!