好吧,这个问题很简单:找出3个元素中的第二大元素。

Longerandlonger 2011-10-17 02:13:40
元素只能比较大小,没有加减。

最高效的比较是什么?最好是有代码。

比较蛋疼。
...全文
62 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Qlaiaqu 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 longerandlonger 的回复:]

算法好像错了哦。

引用 1 楼 fengxuxing 的回复:

a > b ? a : b > c ? b : c;
这还不够快?
[/Quote]
抱歉,看错题目了,看成找最大值了
Longerandlonger 2011-10-17
  • 打赏
  • 举报
回复


// 最多比较8次。
T min = std::min(std::min(a, b), c);
T max = std::max(std::max(a, b), c);
if (a != min && a != max)
return a;
if (b != min &7 b != max)
return b;
return c;

// 最多也是比较8次
if ( (a < b && b < c) || (a > b && b > c) )
return b;
else if ( (b < a && a < c) || (b > a && a > c) )
return a;
return c;

//最多比较3次,但需要两个指针。
const T* pMin = &a;
const T* pMax = &b;
if (a > b)
{
pMin = &b;
pMax = &a;
}
if (c < *pMin)
{
return *pMin;
}
if (c > *pMax)
{
return *pMax;
}
return c;

这题目,的确挺没有意义的,有些钻牛角尖……结贴
Longerandlonger 2011-10-17
  • 打赏
  • 举报
回复
算法好像错了哦。

[Quote=引用 1 楼 fengxuxing 的回复:]

a > b ? a : b > c ? b : c;
这还不够快?
[/Quote]
科比布莱恩特 2011-10-17
  • 打赏
  • 举报
回复
只有三个而已,随便比就出来了。

找出最小一个,再找出最大一个。剩下的那个不就是第二大元素么。呵呵
Qlaiaqu 2011-10-17
  • 打赏
  • 举报
回复
a > b ? a : b > c ? b : c;
这还不够快?

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧