讲解
各位肯定都遇到过求最大最小值的题目吧
一般都是让用字典序输出
这时候怎么办呢
这里提供一个方法
打擂台
我们找出一个最大值(最小值),然后再把数组里每一个数与他比较,如果比他大(小),就更新数值,最终剩下来的就是按字典序的最大值(最小值)了
代码演示:
#include <iostream>
using namespace std;
const int N=1e6+10;
int num[N];
int main(){
int n;
cin>>n;
int maxx=-1;
for(int i=1;i<=n;i++){
cin>>num[i];
if(num[i]>maxx){
maxx=num[i];
}
}
cout<<maxx<<endl;
return 0;
}
也可以修改成用max函数作为for循环的主体
例题
题目:开开的字符串
你不会知道开开有多喜欢字符串!开开每拿到一个字符串,就会一直琢磨其中的规律,今天他又拿到
了一个字符串,他这次想要尝试知道,字符串中出现的所有字母中,出现最多的字母,和出现最少的
字母之间出现次数的差值会有多少呢?他遇到了麻烦,聪明的你可以帮他解决这个问题吗?
输入格式:
一个字符串,只包含小写字母,保证至少有两个字母出现的次数不同,字符串长度小于1e6。
输出格式:
先输出两个字母,分别表示出现次数最少的字母和最多的字母,再输出它们出现次数的差。
若有多解,输出字典序最小的。
限制:
空间限制:128MByte
时间限制:1秒
样例:
输入:
iloveturingzone
输出:
g e 1
提示:
g出现了1次,e出现了2次
这道题是老师给我们安排的考试里的第二题
还是很简单的
代码:
#include <iostream>
using namespace std;
int sum[100000];
int main(){
string a;
getline(cin,a);
int len=a.length();
for(int i=0;i<len;i++){
sum[a[i]]++;
}
int maxx=-1,minn=666666,k1=0,k2=0;
for(int i='a';i<='z';i++){
if(maxx<sum[i]){
maxx=sum[i];
k1=i;
}
if(minn>sum[i]&&sum[i]!=0){
minn=sum[i];
k2=i;
}
}
cout<<(char)k2<<" "<<(char)k1<<" ";
cout<<maxx-minn;
return 0;
}