翻转数组

									题目描述

给定一个长度为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>
#include <vector>
using namespace std;
int main(){
    int n;
    while(cin>>n){
        vector<int> in(n);
        for(int i=0;i<n;i++)
            cin>>in[i];
        int k=0, m=0;
        bool flag1=true, flag2=true;
        for(int i=0;i<n-1;i++){
            if(in[i]<in[i+1]&&flag1){
                continue;
            }
            else {
                if(flag1) {k=i;  flag1=false;}
                if(in[i]>in[i+1])
                    continue;
                else{
                    m=i;
                    break;
                }
            }
        }
        if(k==m||in[k]>in[m+1]){
            cout<<"no"<<endl;
            continue;
        }
        int i=m;
        for(;i<n-1;i++){
            if(in[i]>in[i+1]){
                cout<<"no"<<endl;
                break;
            }
        }
        if(i>=n-1)
            cout<<"yes"<<endl;
    }
    return 0;
}
时间: 2024-10-15 00:27:56

翻转数组的相关文章

Java翻转数组的方法

java的api没用翻转数组的工具类,只能自己写了. int [] testIntArr = {1,2,3}; //翻转数组 for (int i = 0; i < testIntArr.length / 2; i++) { Object temp = testIntArr[i]; testIntArr[i] = testIntArr[testIntArr.length - 1 - i]; testIntArr[testIntArr.length - 1 - i] = (int) temp; }

LeetCode Rotate Array 翻转数组

题意:给定一个数组,将该数组的后k位移动到前n-k位之前.(本题在编程珠玑中第二章有讲) 思路: 方法一:将后K位用vector容器装起来,再移动前n-k位到后面,再将容器内k位插到前面. 1 class Solution { 2 public: 3 void rotate(int nums[], int n, int k) { 4 if( !k || !n || n==1 || k==n ) return; 5 k %= n; 6 vector<int> cha; 7 cha.reserve

C语言实现快速翻转数组的顺序

#include <stdio.h> void Reverse(int *p , int size) { int i , tmp; for(i = 0 ; i < size/2 ; i++) { tmp = p[i] ; p[i] = p[size-1-i] ; p[size-1-i] = tmp ; } } int main(void) { int i ; int buffer[] = {1,2,3,4,5,6,7} ; Reverse(buffer,7); for(i = 0 ; i

JS基础:翻转数组

1 var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 2 console.log(arr); 3 //操作原数组,让原数组第一位和最后一个位调换位置,以此类推. 4 for (var i = 0; i < arr.length/2; i++) { 5 var temp = arr[i]; 6 //前面项和对应的后面项交换位置.(arr.length-1-i = 倒数第i+1项) 7 arr[i] = arr[arr.length-1-i]; 8 arr[arr

[LeetCode] Score After Flipping Matrix 翻转数组后的分数

We have a two dimensional matrix?A?where each value is?0?or?1. A move consists of choosing any row or column, and toggling each value in that row or column: changing all?0s to?1s, and all?1s to?0s. After making any number of moves, every row of this

php 学习笔记--数组篇(6)

array_rand(array, number); 作用: 随机获取数组中number个key值 参数: array:数组 number:规定返回的参数的个数 返回值: 返回随机的array数组中的key值 例子:  $arr = array('a' =>'blue', 'b' => 'red', 'c' => 'yellow', 'd' => 'purple');  $res = array_rand($arr, 3);   print_r($res);  输出结果:     

数组,冒泡排序

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <script> //求一组数中的所有数的和 和平均值 /* var arr = [10,20,30,10]; var len = arr.length; var sum =

php正则表达式and数组

<?php //正则表达式 //斜杠代表定界符 /^$/ /* $str="abcde123fg456h"; $reg="/\d/"; echo preg_replace($reg,"#",$str);//将字符串str按照正则表达式reg替换为# var_dump(preg_split($reg,$str)); //将字符串str按照正则表达式拆分 $arr=array(); preg_match($reg,$str,$arr);//匹配

javadoc简易数组工具类文档(API)

制作简易数组工具类文档(API) 如何创建文档 以数组工具类(Array)为例一丶创建一个数组工具类  要求实现(1)遍历数组(2)求数组中的最大值(3)查询数组中的元素在数组中第一次出现的索引(4)将数组元素翻转并遍历 /** * 这是数组的一个工具类 * @author Apple * @version V1.0 * */ public class Array{  private Array(){ //将无参构造私有化,无法实例化  }    /**遍历数组  * @param arr :需