| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 3784 交换相邻元素(思维题) -> 正文阅读 |
|
[数据结构与算法]3784 交换相邻元素(思维题) |
1. 问题描述: 给定一个长度为 n 的数组 a1,a2,…,an。该数组是一个 1~n 的排列。数组的前 n?1 个位置中,部分位置可以进行交换操作,将该位置的元素与后面相邻位置的元素进行互换。交换操作的次序和次数均不限。请你判断给定的数组能否通过交换操作变为一个升序数组。 输入格式 第一行包含整数 n。第二行包含 n 个整数 a1,a2,…,an。第三行包含一个长度为 n?1 的 01 字符串,第 i 个字符为 1 表示第 i 个位置可以进行交换操作,第 i 个字符为 0 表示第 i 个位置无法进行交换操作。 输出格式 给定的数组可以通过交换操作变为一个升序数组则输出 YES,否则输出 NO。 数据范围 2 ≤ n ≤ 2 × 10 ^ 5, 输入样例1: 6 输出样例1: YES 输入样例2: 6 输出样例2: NO 2. 思路分析: 分析题目可以知道数组a是一个1~n的排列,可以发现如果当前存在一段连续的1的时候,那么内部的元素是可以相互交换直到内部元素有序的类似于冒泡排序,由于最终需要满足升序所以每一段区间对应的元素是确定的,例如对于区间[3,5]内部的元素可以相互交换那么最终需要满足区间中的元素为[3,4,5]这样才满足要求,如何判断当前区间的中的元素是否全部在当前的区间呢?由于ai两两不同所以判断区间中的最大值和最小值是否是区间端点即可,并且进一步可以发现只需要判断区间中的最大值是否是区间终点即可,因为在枚举的时候当前区间的最小值一定存在,所以只需要枚举区间端点是否是等于当前ai的最大值即可。 3. 代码如下:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 15:24:09- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |