C++ STL算法(一)利用STL算法解决很常见的一些子问题

news2024/11/25 6:56:29

文章目录

  • next_permutation
  • lower_bound 与 upper_bound
  • partial_sum
  • sort 与 unique

next_permutation

cplusplus:
next_permutation

作用:得到所有的全排列

例题:
P1706 全排列问题

void test1()
{
    int n;
    cin >> n;
    int* arr = new int[n];

    _rep(i, 0, n)
    {
        arr[i] = i + 1;
    }
    do {
        _rep(i, 0, n)
        {
            printf("%5d", arr[i]);
        }
        cout << endl;
    } while (next_permutation(arr, arr + n));
    delete[] arr;
}

当然这样类似的题目也可以使用回溯法实现,回溯法是实现这类问题的主要方法。


lower_bound 与 upper_bound

lower_bound:得到大于等于这个数字的第一个元素。 否则(没有找到)返回尾后迭代器
upper_bound:得到大于这个数字的第一个元素。否则,返回尾后迭代器

这两个算法的实现就是运用了二分查找的思想,STL用于二分查找的函数:binary_search

这两个函数在查找找到元素第一个与最后一个元素的下标位置的题目中有奇效

例题:力扣 34. 在排序数组中查找元素的第一个和最后一个位置

class Solution {
public:
    vector<int> searchRange(vector<int>& nums, int target) {
        vector<int> res;
        auto it1=lower_bound(nums.begin(),nums.end(),target);
        if (it1==nums.end() || *it1!=target) return {-1,-1};
        auto it2=lower_bound(nums.begin(),nums.end(),target+1)-1;
        return {int(it1-nums.begin()),int(it2-nums.begin())};
    }
};

这道题目也可以我们自己来实现二分查找的功能,具体实现可细节可以看我这篇博客:
二分查找的多种实现方式及本质解析(c++实现 + 例题)


partial_sum

partial_sum位于头文件numeric中。

作用: 用于求原数组的前缀和,并且保存于一个新的目标数组中。

前缀和是我们的一个重要的算法思想,使用这个函数,可以快速求某一个序列的前缀和。

函数接受一个原序列的头和尾,接受一个目标序列,最终目标序列的某一位存储的就是原序列到某一位为止的前缀和。

如下:

y0 = x0
y1 = x0 + x1
y2 = x0 + x1 + x2
y3 = x0 + x1 + x2 + x3
y4 = x0 + x1 + x2 + x3 + x4

实现:

//前缀和
void test2()
{
    vector<int> src{ 1,2,3,4,5 };
    vector<int> dst;
    partial_sum(src.begin(), src.end(), back_inserter(dst));
    _rep(i, 0, dst.size())
    {
        cout << dst[i] << " ";
    }
}

在这里插入图片描述


sort 与 unique

sort:给一个序列排序
unique:对序列去重,注意这里的去重是指把重复多余的数字放在不重复的序列的后面而已,并不是真正的删除,使用erase来删除后面。返回排序后第一个多余的元素的位置。

例题:P1138 第 k 小整数

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

int main()
{
    int n,k;
    cin>>n>>k;
    vector<int> arr(n);
    for (int i=0;i<n;i++)
    {
        cin>>arr[i];
    }
    //排序
    sort(arr.begin(),arr.end());
    //去重,返回去重后的迭代器
    auto it=unique(arr.begin(),arr.end());
    int len=int(it-arr.begin());
    if (len<k) cout<<"NO RESULT";
    else cout<<arr[k-1];
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Oracle基础版

这是上上周的事情&#xff0c;我们甲方强烈要求使用oracle数据库&#xff0c;也就上学的时候玩过Oracle也忘得差不多了&#xff0c;所以一直不想弄&#xff0c;我们开会产品说要提测了&#xff0c;我还没弄&#xff0c;这不得哐哐开始干活&#xff0c;过程吧还算顺利&#xff0…

Java学习之第八章练习题-1

目录 第一题 题目 我的代码 Person类 错误 正确写法 输出结果 附加要求 代码 结果 第二题 题目 答案 第三题 题目 代码 总结不足 创建对象并运行 第四题 题目 运行结果​编辑 第五题 题目 第六题 题目 第一题 题目 我的代码 Person类 package com.hspedu…

DBCO-NHS 1353016-71-3,二苯基环辛炔-活性酯 可用于以高特异性和反应性标记叠氮化物修饰的生物分子

名称 DBCO-NHS ester 中文名称 二苯基环辛炔-活性酯 英文名称 DBCO-NHS NHS-DBCO 分子量 402.40 CAS 1353016-71-3 溶剂 溶于DMSO, DMF, DCM, THF, Chloroform 存储条件 -20冷冻保存 保存时间 一年 结构式 DBCO&#xff08;二苯并环辛炔&#xff09;是一种环炔烃&…

怎么将视频转为音频mp3格式?这些转换方法一分钟就能学会

随着现在娱乐方式的多样化&#xff0c;我们可以在闲暇时间做一些令人放松的事情。对于我来说&#xff0c;就很喜欢一边听歌一边发呆。我之前喜欢的一位歌手&#xff0c;他的翻唱歌曲以及原创音乐都得到了网友很高的评价&#xff0c;但是有些歌曲在平台上没有音源&#xff0c;我…

【内网安全-CS】Cobalt Strike启动运行上线方法

目录 一、启动运行 1、第一步&#xff1a;进入cs目录 2、第二步&#xff1a;查看本机ip 3、第三步&#xff1a;启动"团队服务器" 4、第四步&#xff1a;客户端连接 二、上线方法 1、第一步&#xff1a;生成监听器 2、第二步&#xff1a;生成木马 3、第三步&…

如何将智能设备关联至云开发中的项目?

将应用中已经连接的设备关联至云项目后&#xff0c;就可以在 涂鸦 IoT 开发平台 通过云开发主动管理和控制对应的设备。云开发提供多种应用中的设备关联方式&#xff1a; 关联自有 App 账号关联自有小程序关联涂鸦 App 账号关联 SaaS 方式一&#xff1a;关联自有 App 大家可以…

深度学习入门(六十)循环神经网络——门控循环单元GRU

深度学习入门&#xff08;六十&#xff09;循环神经网络——门控循环单元GRU前言循环神经网络——门控循环单元GRU课件关注一个序列门候选隐状态隐状态总结教材1 门控隐状态1.1 重置门和更新门1.2 候选隐状态1.4 隐状态2 从零开始实现2.1 初始化模型参数2.2 定义模型2.3 训练与…

前端本地存储数据库 IndexedDB 存储文件

介绍 IndexedDB 是一种底层 API&#xff0c;用于在客户端存储大量的结构化数据。目前各浏览器都已支持&#xff0c;兼容性很好。 特点 IndexedDB 是一个基于 JavaScript 的面向对象数据库&#xff0c;IndexedDB 允许您存储和检索用键索引的对象&#xff1b;可以存储结构化克隆…

MySQL8.0基础篇

文章目录一、MySQL概述1、数据库概述1.1 数据库作用1.2 数据库的相关概念2、MySQL概述2.1 概述2.2 RDBMS与非RDBMS3、MySQL环境安装3.1 MySQL的下载、安装、配置(win)3.2 MySQL登录3.3 MySQL演示使用3.4 MySQL目录结构与源码二、SQL查询1、SQL详情1.1 SQL分类1.2 SQL语言的规则…

Docker和docker-compose中部署nginx-rtmp实现流媒体服务与oob和ffmpeg推流测试

场景 Windows上搭建Nginx RTMP服务器并使用FFmpeg实现本地视频推流&#xff1a; Windows上搭建Nginx RTMP服务器并使用FFmpeg实现本地视频推流_霸道流氓气质的博客-CSDN博客_nginx-rtmp-win64 上面讲的是在windows中搭建nginx-rtmp&#xff0c;如果实在centos中使用docker或…

使用Git拉取和推送到仓库

使用Git拉取和推送到仓库 0、前置工作 首先安装和配置git &#xff0c;参考&#xff1a; git安装教程_嘴巴嘟嘟的博客-CSDN博客_全局安装gitGit上传文件代码到GitHub&#xff08;超详细&#xff09;_蓝布棉的博客-CSDN博客_git上传文件到github仓库 没有仓库的情况 创建仓…

项目总结篇

注意会话管理&#xff1a;cookie,session的作用&#xff1b;(Redis等) 过滤敏感词&#xff08;相关算法&#xff09;&#xff0c;事务&#xff08;Spring怎么管理&#xff09; Redis的数据结构适合那种情况 kafka&#xff1a;框架背后通用的原则&#xff0c;模式&#xff0c;生…

jsp+ssm计算机毕业设计房屋租赁管理系统【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

大数据 集群测试部分

查看HDFS集群状态 在浏览器里访问http://master:9870 不能通过主机名master加端口9870的方式&#xff0c;原因在于没有在hosts文件里IP与主机名的映射&#xff0c;现在只能通过IP地址加端口号的方式访问&#xff1a;http://192.168.1.101:9870 修改宿主机的C:\Windows\System…

2023年大学毕业生,我有话想对你说

虽然每年都说大学毕业生有多少多少&#xff0c;就业难&#xff0c;但貌似以往的经济寒冬&#xff0c;互联网寒冬都不如2022年2023年这么寒冷。 可以说&#xff0c;2022年一整年都是在裁员的声音中度过的&#xff0c;有的公司逐渐取消年终奖&#xff0c;原本熙熙攘攘的办公室&am…

看看欧洲国际学校的IB分数排名

大家好&#xff0c;今天为大家整理了欧洲的国际学校IB分数排名&#xff0c;信息搬运自IB分数网站。如果有偏差还请好心人出来指正。 可以看到&#xff0c;整个榜单瑞士的国际学校数量最多。确实&#xff0c;其实大部分国家的一线国际学校都是集齐在首都城市。 而瑞士的国际学校…

BFS算法-leetcode java题解

BFS算法-leetcode java题解 本文目录BFS算法-leetcode java题解BFS算法思想leetcode 111. 二叉树的最小深度leetcode 1091. 二进制矩阵中的最短路径leetcode 752. 打开转盘锁leetcode 127. 单词接龙leetcode 433. 最小基因变化leetcode 1162. 地图分析leetcode 695. 岛屿的最大…

记一次Spring4shell漏洞分析

漏洞条件 1.Tomcat war包部署 Tomcat 9.60<&#xff08;Tomcat9.61已打补丁&#xff09; 1.Web应用以war包部署到Tomcat中时使用到ParallelWebappClassLoader 2.而以jar包部署的classLoader嵌套参数被解析为org.springframework.boot.loader.LaunchedURLClassLoader&#…

OFDM系统同步技术的matlab仿真,包括符号定时同步,采样钟同步,频偏估计

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 在单载波系统中&#xff0c;载波频率的偏移只会对接收信号造成一定的幅度衰减和相位旋转&#xff0c;这可以通过均衡等方法来加以克服。而对于多载波系统来说&#xff0c;载波频率的偏移会导致子…

拖动布局的两种方式

一种是弹窗的拖动布局&#xff0c;一种是非弹窗。 代码如下&#xff1a; 非弹窗&#xff1a;这里加载了一个本地的视频 import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; import android.view.MotionEvent; import an…