1-2算法基础-常用库函数

1.排序
sort(first,last,cmp)
first指向要排序范围的第一个元素,从0起
last指向要排序范围的最后一个元素的下一个位置
cmp(可选),自定义函数,默认从小到大

在这里插入图片描述
评测系统

#include <iostream>
#include<algorithm> 
using namespace std;
bool cmp(int a, int b) {
    return a > b;//定义从大到小排序
}
int main()
{
    int n;
    cin >> n;
    long long int a[500005];
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    sort(a, a + n);//从小到大
    for (int i = 0; i < n; i++) {
        cout<< a[i]<<" ";
    }
    cout << endl;
    sort(a, a + n,cmp);//定义比较函数
    for (int i = 0; i < n; i++) {
        cout << a[i] << " ";
    }
    return 0;
}

2.最值查找
min和max只能传入两个值或一个列表
min(3,5)=3
min({1,2,3,4})=1
min_element(st,ed)
st到end(不含)中最小那个值的地址

[例]成绩分析
在这里插入图片描述
在这里插入图片描述

评测系统

#include <iostream>
#include <algorithm>
#include <numeric>
#include <iomanip>
using namespace std;
int main()
{
    int n;
    cin >> n;
    int a[10005];
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    int* x = max_element(a, a + n);  //#include <algorithm>
    cout << *x<<endl;

    x = min_element(a, a + n);  //#include <algorithm>
    cout << *x<<endl;

    double sum = accumulate(a, a + n, 0);  //#include <numeric>
    cout << fixed << setprecision(2) << 1.0*sum / n;  //#include<iomanip>,*1.0确保是小数,这样才能确保精度
    return 0;
}

3.二分查找
二分查找的库函数只能处理数字式单调不减/单调不增的

(1)binary_search
头文件#include <algorithm>
返回bool类型

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int a[] = { 1,4,6,8,9 };
    //查找6,返回bool类型,成功1,失败0
    cout << binary_search(a, a + 5, 6); // # include <algorithm>
}

(2)lower_bound
复杂度O(log n)
适用于单调不减的数组

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int a[] = { 1,4,6,6,9 };
    //返回第一个大于等于6的地址
    cout<<lower_bound(a, a + 5, 6);// 000000DB0954F9C0
    //减去首地址,返回的是索引下标,即6第一次出现的位置
    cout << lower_bound(a, a + 5, 6)-a;// 2
}

(3)upper_bound
适用于单调不减的数组

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int a[] = { 1,4,6,6,9 };
    //返回第一个大于6的地址
    cout<<upper_bound(a, a + 5, 6);// 000000010134FC58
    //减去首地址,返回的是索引下标
    cout << upper_bound(a, a + 5, 6)-a;// 4
}

[例] 二分查找数组元素,要求复杂度小于O(n)

在这里插入图片描述
在这里插入图片描述
解:数组中没有相同元素,且是单调递增的

#include <iostream>
using namespace std;
int main()
{
    int data[200];
    for (int i = 0; i < 200; i ++){
      data[i] = 4 * i + 6;
    }
    int  n;
    cin >> n;
    cout<<lower_bound(data, data + 200, n)-data;//lower_bound得到的是地址,减去首地址data即为下标
    return 0;
}

4.大小写转换

#include <iostream>
using namespace std;
int main()
{
    char a = 'A';
    if (isupper(a)) {//isupper判断是否是大写字母,bool类型
        cout << tolower(a);//转为小写,ASCII类型。输出:97
        cout << char(tolower(a));//ASCII转字符。输出:a
    }
}

对应的
判断是否小写(bool):islower
转小写(ASCII):tolower

当前,也可以用ASCII直接转换,
a 97
A 65
相差32

#include <iostream>
using namespace std;
int main()
{
    char s = 'A';
    cout << char(s + 32);// a
}

5.全排列(排列组合)
只能处理初始有序的序列
(1)next_permutation
若初始是abc(这是最小的序列组合(在字符串比较中))
大一点acb
再大bac
再大bca
再大cab
最大cba

#include <iostream>
#include <algorithm>
using namespace std;
int main() {
    int a[3] = { 2, 5, 7 };
    do {
        for (int i = 0; i < 3; i++) {
            cout << a[i];
        }
        cout << endl;
    } while (next_permutation(a, a + 3));
    return 0;
}

输出:
257
275
527
572
725
752

(2)prev_permutation
由大到小输出,初始序列应为降序

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    int a[3] = { 7, 5, 2 };
    do {
        for (int i = 0; i < 3; i++) {
            cout << a[i];
        }
        cout << endl;
    } while (prev_permutation(a, a + 3));

    return 0;
}

输出:
752
725
572
527
275
257

6.其他库函数

(1)memset
用于将一块内存区域的每个字节都设置为特定的值,通常用于初始化内存块
头文件#include <cstring>

只能设置成0或-1

int a[3] = { 7,6,4 };
memset(a, 0, sizeof(a));//对a数组每个元素初始化0

(2)swap
交换两个变量的值,变量值发生了改变

#include <iostream>
using namespace std;
int main() {
    int a = 1;
    int b = 2;
    swap(a, b);
    cout << a; //2
    return 0;
}

(3)reverse
翻转数组,会修改数组元素值

#include <iostream>
using namespace std;
int main() {
    int a[5] = { 1,2,3,4,5 };
    reverse(a, a + 5);
    for (int i = 0; i < 5; i++) {
        cout << a[i];//54321
    }
}

(4)unique
去除相邻重复元素
复杂度O(n)

#include <iostream>
#include <algorithm>
using namespace std;
int main() {
    int a[10] = { 1, 2, 2, 3, 3, 3, 4, 5, 5, 5 };
    int* b=unique(a, a + 10);//指针b指向了去重后的最后一个元素的下一个位置
    int n = b-a;//b-起始地址即为去重后数组的元素个数
    for (int i = 0; i < n; i++) {
        cout << a[i];//12345
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/226029.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据库备份脚本

#!/bin/bash #数据库备份 #工具&#xff1a;xtrabackupif [ ! -d /xtrabackup/ ];thenmkdir /xtrabackup/{full,inter,diff} -p fito_mail15191876750163.com db_userroot db_passwdAren123 basedir/xtrabackup/full/ baseinter/xtrabackup/inter/ basediff/xtrabackup/diff/ f…

Java程序员,你掌握了多线程吗?(文末送书)

目录 01、多线程对于Java的意义02、为什么Java工程师必须掌握多线程03、Java多线程使用方式04、如何学好Java多线程送书规则 摘要&#xff1a;互联网的每一个角落&#xff0c;无论是大型电商平台的秒杀活动&#xff0c;社交平台的实时消息推送&#xff0c;还是在线视频平台的流…

房产报备小程序开发方案详解

房产客户报备小程序&#xff0c;php语言&#xff0c;uniapp前端。 房产公司合作的一些渠道商&#xff0c;渠道商在报备端报备客户&#xff0c;房产公司的人在确客端确认报备。报备的客户是以手机号为判断&#xff0c;已经报备过的手机号无法再次报备&#xff0c;有效时间到期后…

Python-基本的输入和输出(input函数和print函数用法)

输入 输出 控制台:一种人和计算机交互最基础的方式 什么是控制台&#xff1f;下面这个东西就是控制台。 但是生活中常用的是图形化界面&#xff0c;最初始的计算机使用的就是这样的控制台进行输入和输出的。 所以原来会使用计算机的都是科学家或者高级知识分子。 直到图形化界…

动手学深度学习笔记

1. 深度学习基础与MLP 1.1 框架&#xff1a; 线性回归&#xff1b; Softmax回归&#xff08;实际上用于分类问题&#xff09;&#xff1b; 感知机与多层感知机&#xff1b; 模型选择&#xff1b; 权重衰退&#xff08;weight decay&#xff09;&#xff1b; 丢弃法&…

使用VS Code远程开发MENJA小游戏并通过内网穿透分享本地游戏到公网

文章目录 前言1. 编写MENJA小游戏2. 安装cpolar内网穿透3. 配置MENJA小游戏公网访问地址4. 实现公网访问MENJA小游戏5. 固定MENJA小游戏公网地址 推荐一个人工智能学习网站 点击跳转学习 前言 本篇教程&#xff0c;我们将通过VS Code实现远程开发MENJA小游戏&#xff0c;并通…

hibernate实现ID序列自增,异常处理

目录 一、问题描述 二、问题解析 一、问题描述 明明数据库表设置了id自增&#xff0c;为啥添加数据时&#xff0c;会抛出异常呢&#xff1f; 具体内容如下&#xff1a; &#xff08;1&#xff09;控制台异常打印如下 org.hibernate.id.IdentifierGenerationException: ids f…

vue.js el-table 动态单元格列合并

一、业务需求&#xff1a; 一个展示列表&#xff0c;表格中有一部分列是根据后端接口动态展示&#xff0c;对于不同类型的数据展示效果不一样。如果接口返回数据是’类型1‘的&#xff0c;则正常展示&#xff0c;如果是’类型2‘的数据&#xff0c;则合并当前数据的动态表格。…

uniapp 打开文件管理器上传(H5、微信小程序、android app三端)文件

H5跟安卓APP 手机打开的效果图&#xff1a; Vue页面&#xff1a; <template><view class"content"><button click"uploadFiles">点击上传</button></view> </template><script>export default {data() {return…

AIOps探索 | 面向多告警源,如何进行统一事件管理 (下)

文章来源&#xff1a;公众号ID-布博士&#xff08;擎创科技资深产品专家&#xff09; 书接上期&#xff0c;本期我们继续分享“统一事件管理”和“智能事件分析与处置”&#xff0c;新来的朋友点这里&#xff0c; AIOps探索 | 面向多告警源&#xff0c;如何进行统一事件管理 &a…

用户案例|Milvus 助力 Credal.AI 实现 GenAI 安全与可控

AIGC 时代&#xff0c;企业流程中是否整合人工智能&#xff08;AI&#xff09;对于的企业竞争力至关重要。然而&#xff0c;随着 AI 不断发展演进&#xff0c;企业也在此过程中面临数据安全管理、访问权限、数据隐私等方面的挑战。 为了更好地解决上述问题&#xff0c;Credal.A…

拼多多商品详情API接口丨百亿补贴商品数据丨秒杀商品数据

拼多多API接口是拼多多网提供的一种应用程序接口&#xff0c;允许开发者通过程序访问拼多多网站的数据和功能。通过拼多多API接口&#xff0c;开发者可以开发各种应用程序&#xff0c;如店铺管理工具、数据分析工具、购物比价工具等。在本章中&#xff0c;我们将介绍拼多多API接…

「薄荷绿」风电智慧运营,有效提高运营效率和能源利用率

随着能源需求的不断增加和全球变暖的加剧&#xff0c;人们对可再生能源的依赖程度不断提高。其中&#xff0c;风能作为一种可再生能源&#xff0c;其清洁、环保、无污染等特点备受青睐&#xff0c;其发展也越来越受到政府和企业的关注。然而&#xff0c;由于风能的不稳定性和不…

初创企业的智慧选择:解析小型企业如何借助ERP系统提升管理效率

ERP系统是不可或缺的企业技术解决方案&#xff0c;其全面性和综合性使其成为企业管理战略的核心组成部分&#xff1b;特别是对于渴望发展的小型企业和初创企业而言&#xff0c;ERP系统的价值更是不可忽视的。 对于大型企业&#xff0c;ERP系统提供了微观管理业务各个方面的能力…

JSP以监听生命周期为例 讲解监听器

好 最后 我们说说监听器 内容还是非常多的 这里 从老师哪里拿到的一个文案 大家可以查看具体内容 我们这里以监听声明周期为例 这边 我们在项目java模块下创建一个包 叫 listener 名字随便取 我们就这样 看着明显一点 然后 我们在下面创建一个java类 叫 test 因为是用来测试的…

视频集中存储/智能分析融合云平台EasyCVR平台接入rtsp,突然断流是什么原因?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

宁夏一男子吸烟“逼”慢高铁 拘留7天 AI技术如何提升公共安全

最近&#xff0c;宁夏的一位男子杨某在高铁卫生间吸烟&#xff0c;触发了列车的烟雾报警系统&#xff0c;导致列车降速运行&#xff0c;最终被拘留7天。这个事件凸显了公共安全的重要性&#xff0c;特别是在交通工具上的安全管理。如果我们能够及时发现并阻止这种行为&#xff…

【论文解读】:大模型免微调的上下文对齐方法

本文通过对alignmenttuning的深入研究揭示了其“表面性质”&#xff0c;即通过监督微调和强化学习调整LLMs的方式可能仅仅影响模型的语言风格&#xff0c;而对模型解码性能的影响相对较小。具体来说&#xff0c;通过分析基础LLMs和alignment-tuned版本在令牌分布上的差异&#…

如何使用Docker本地搭建开源CMF Drupal并结合内网穿透公网访问

文章目录 前言1. Docker安装Drupal2. 本地局域网访问3 . Linux 安装cpolar4. 配置Drupal公网访问地址5. 公网远程访问Drupal6. 固定Drupal 公网地址 前言 Dupal是一个强大的CMS&#xff0c;适用于各种不同的网站项目&#xff0c;从小型个人博客到大型企业级门户网站。它的学习…

java--枚举

1.枚举 枚举是一种特殊类 2.枚举类的格式 注意&#xff1a; ①枚举类中的第一行&#xff0c;只能写一些合法的标识符(名称)&#xff0c;多个名称用逗号隔开。 ②这些名称&#xff0c;本质是常量&#xff0c;每个常量都会记住枚举类的一个对象。 3.枚举类的特点 ①枚举类的…
最新文章