楼主:
freexq (快乐蕃茄)
2018-05-10 20:39:56题目:5个数字取最大值
贡献三种写法,希望有人能贡献更多写法
根据以往写程式的经验,一个题目不会只有一种解法
资料结构也许不同以外,程式流程(算法)也不同
以下我的
第一种解法是手刻
第二种解法是利用sort()函式排列由小至大,然后取最大数
第三种解法是偷吃步,直接呼叫max_element()函式
基本上作业或考试应该用第一种手刻
而第二、三种写法应该是自己开发程式情况下,直接取适合函式出来用
优点是比较不容易出错,而且更节省时间
自己手刻则不一定一次到位,可能要test或debug。
以下是程式码
(一)
#include <iostream>
using namespace std;
int main()
{
int num[5],max;
//输入五个整数至阵列num[]
cout<<"请输入5个数字"<<endl;
for(int i=0;i<5;i++)
cin>>num[i];
//逐一和整个阵列比较,取最大
max=num[0];
for(int i=1;i<5;i++)
{
if(num[i]>max)
max=num[i];
}
//输出最大数
cout<<"\n最大数为 "<<max<<endl;
return 0;
}
(二)
#include <iostream>
#include <algorithm>
using namespace std;
int main ()
{
int num[5];
//输入5个int数字至num[]
cout<<"请输入5个数字"<<endl;
for(int i=0;i<5;i++)
cin>>num[i];
//开始排序,由小到大
sort(num,num+5);
//输出最大数
cout<<"\n最大数为 "<<num[4]<<endl;
return 0;
}
(三)
#include <iostream>
#include <algorithm> //使用max_element()函数
using namespace std;
int main()
{
int num[5];
//输入5个int数字至num[]
cout<<"请输入5个数字"<<endl;
for(int i=0;i<5;i++)
cin>>num[i];
//输出最大数
//注意max_element()函数传回 指标
cout<<"\n最大数为 "<<*max_element(num,num+5)<<endl;
return 0;
}
作者: longlongint (华哥尔) 2018-05-10 21:17:00
有没有 greedy 版本哦哦 看到了 手刻
用max heap最快,建一个priority_queue,然后直接输出top就可以了
作者:
Lipraxde (Lipraxde)
2018-05-11 08:55:00取一个最大值得干嘛建heap?
作者:
Lipraxde (Lipraxde)
2018-05-11 11:58:00我的意思是题目只要求最大值,不需要去建heap等题目要第二、第三...在这样做
连sort都不用的事情。这个题目根本不值得想那么久。初学者往往在不用temp的swap或三行变两行上浪费时间本来举例意思只是语言入门的时候对这些超简单issues就应该教最有效率的“铁锤敲钉子”方法 当idiom记起来以后才不会在这些问题上踌躇迷失结果现在竟然把idiom当作文比赛 真是充满幽默感
作者: jerryh001 2018-05-11 18:34:00
原文推文最下面
话说我是觉得heap就有stl了,不会很难啊,而且复杂度是O(log(n)),比起全部搜一遍的O(n)好吧
楼主:
freexq (快乐蕃茄)
2018-05-11 20:22:00什么是铁锤敲钉子方法?
作者:
Lipraxde (Lipraxde)
2018-05-12 01:03:00我还没学过怎么在O(logn)建heap,教一下
作者:
sppmg (sppmg)
2018-05-13 00:49:00这系列文也来的太晚 XD 。我是觉的啦!当你觉得题目不值得想那么久,你的技术就已经落于人后了。记得之前板上看过国外也有人问怎样n=-n,据说底下回超长。即使解法可能效率差应用优势也可能依环境而有不同。之前我朋友也问一题leetcode:如何不用+做加法。难道去想也是浪费时间?
作者:
Neisseria (Neisseria)
2018-05-13 17:36:00heap sort 是 O(n log(n)) 吧