P5682 [CSP-J2019 江西] 次大值% 运算 set 去重的一道好题

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
int n, x, len, a[100010], ans;
set<int> s;
set<int>::iterator asd;
int main()
{
    /*
    a[n-1]  是最大的
    a[n-2]  可能是次大的
    a[n]%a[n-1]<a[n-1] 不可能是最大的,可能是次大的
    a[n-1]%a[n-2]<a[n-2]  不可能是次大的
    a[n-2]%a[n-3]<a[n-3]  不可能是次大的
    所以次大值在a[n-2]和a[n]%a[n-1]中取得,为两者中的最大值
    */
    scanf("%d", &n);
    //set会自动从小到大排序
    for(int i=1; i<=n; ++i){
        scanf("%d", &x);
        s.insert(x);
    }
    n=int(s.size());    //获取不重复的数字个数
    asd=s.begin();
    //将数字存在a数组中
    for(int i=1; i<=n; ++i){
        a[i]=*asd;  //asd 是迭代器
        asd++;
    }
    //原数只有 1 个
    if(n==1){
        printf("-1");
    }
    else if(n==2){  //原数有两个, 则余数为 a[n-1] 和 a[n]%a[n-1]<a[n-1]
        printf("%d", a[n]%a[n-1]);
    }
    else{   //原数至少 3 个
        ans=max(a[n]%a[n-1], a[n-2]);
        printf("%d", ans);
    }
    return 0;
}
相关推荐
九圣残炎20 分钟前
【从零开始的LeetCode-算法】1456. 定长子串中元音的最大数目
java·算法·leetcode
lulu_gh_yu25 分钟前
数据结构之排序补充
c语言·开发语言·数据结构·c++·学习·算法·排序算法
丫头,冲鸭!!!1 小时前
B树(B-Tree)和B+树(B+ Tree)
笔记·算法
Re.不晚1 小时前
Java入门15——抽象类
java·开发语言·学习·算法·intellij-idea
为什么这亚子2 小时前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
2 小时前
开源竞争-数据驱动成长-11/05-大专生的思考
人工智能·笔记·学习·算法·机器学习
~yY…s<#>2 小时前
【刷题17】最小栈、栈的压入弹出、逆波兰表达式
c语言·数据结构·c++·算法·leetcode
幸运超级加倍~3 小时前
软件设计师-上午题-16 算法(4-5分)
笔记·算法
yannan201903133 小时前
【算法】(Python)动态规划
python·算法·动态规划
埃菲尔铁塔_CV算法3 小时前
人工智能图像算法:开启视觉新时代的钥匙
人工智能·算法