题目描述
给定一个长度为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]。
输入第一行数据是一个整数:n (1≤n≤105),表示数组长度。第二行数据是n个整数a[1], a[2], ..., a[n] (1≤a[i]≤109)。
样例输入42 1 3 4输出输出“yes”,如果存在;否则输出“no”,不用输出引号。
样例输出yes
http://exercise.acmcoder.com/online/online_judge_ques?ques_id=1656&konwledgeId=134链接在这里。var n=read_line();
var arr=[];
var brr=read_line().split(" ");
brr.forEach(function(element){  arr.push(+element);           }
);
var start=-1,end=-1;
var decre=[];
for(var i=0; i<arr.length;i++){
if(arr[i]>arr[i+1]){ start=i ; break;}
}
if (start===-1){print("yes");}
else{
for(var i=0; i<arr.length;i++){
if(arr[i]>=arr[i+1]){ decre.push(arr[i]);}
}
decre.push(arr[i]);
end=i;
var condition1=(end===arr.length-1)?true:(decre[0]<=arr[end+1]);
var condition2=(start===0)?true:(decre[decre.length-1]>=arr[start-1]);
  
if(condition1&&condition2) {print("yes");}
else {print("no");}}谁能看看是为什么。。