每天一个小题目——翻转数组
来源:互联网 发布:电脑无法安装软件 编辑:程序博客网 时间:2024/06/05 11:29
翻转数组
- 题目描述
给定一个长度为n的整数数组a,元素均不相同,问数组是否存在这样一个片段,只将该片段翻转就可以使整个数组升序排列。 其中数组片段[l,r]表示序列a[l], a[l+1], …, a[r]。原始数组为 a[1], a[2], …,a[l-2], a[l-1], a[l], a[l+1], …, a[r-1], a[r], a[r+1], a[r+2], …, a[n-1], a[n], 将片段[l,r]反序后的数组是 a[1], a[2], …, a[l-2], a[l-1], a[r], a[r-1], …, a[l+1], a[l],a[r+1], a[r +2], …, a[n-1], a[n]。
代码如下:
#include<iostream>using namespace std;int main(){ int n; cin >> n; int *p = new int[n]; for (int i = 0; i < n; ++i) cin >> p[i]; int t1, t2; for (int i = 1; i < n; ++i) if (p[i] - p[i-1] < 0){ t1 = i-1; // 记录数组中递减序列的起始位置 break; } for (int i = n-1; i > 0; --i) if (p[i] - p[i-1] < 0){ t2 = i; // 记录数组中递减序列的结束位置 break; } for(int i = t1, j = t2; i < j; ++i,--j){ int temp; temp = p[i]; p[i] = p[j]; p[j] = temp; } // for (int i = 0; i < n; ++i) // 可以输出 调转之后的数组序列 // cout << p[i] << " ";// cout << endl << t1 << " " << t2 << " " << endl; string s = "yes"; for (int i = 1; i < n; ++i) if (p[i] < p[i-1]){ s = "no"; break; } delete [] p; cout << s << endl; return 0;}
0 0
- 每天一个小题目——翻转数组
- 每天一个小题目——股神
- 每天一个小题目——路灯
- 每天一个小题目——约会
- 每天一个小题目——上台阶
- 每天一个小题目——小明的棋盘
- 每天一个小题目——小赛打车
- 每天一个小题目——约德尔测试
- 每天一个小题目——学打字
- 每天一个小题目——计算器的新功能
- 每天一个小题目——完美数
- 每天一个小题目——马路上的路灯
- 每天一个小题目——日期倒计时
- 每天一个小题目——公交车乘客
- 每天一个小题目——喷水装置
- 每天一道算法题目(18)——取等长有序数组的上中位数和不等长有序数组的第k小的数
- 每天一个小程序(4)——顺序栈
- 每天一个小程序(6)—— 链栈
- iOS开发的一些函数算法
- 房卡麻将分析系列之"断线重连"
- 你了解的技术宅是这样吗?
- es aggs 统计 代码
- CMakeList配置之编译多个.cpp文件
- 每天一个小题目——翻转数组
- mysql数据库主从同步
- DB2缓冲池、表空间详解
- log4j 输入日志文件入门
- STM32F103单片机RTC结合time.h使用
- 微信jssdk config:invalid signature 签名错误 ,问题排查过程
- OVERLAPPED详解
- 小硅片与大数据的结合 ——协鑫光伏的新制造之路
- Skinned Mesh 原理解析和一个最简单的实现示例