0
点赞
收藏
分享

微信扫一扫

基本算法练习-翻转数组

祈澈菇凉 2022-07-12 阅读 67


  翻转数组是这样的一类问题:

    即将 某一个数组的局部翻转后, 使得整体数组有序。以升序为例。

    我的思考是将数组分为三段: 引入 左指针右指针;其中,左指针往右推送,直至不再升序退出右指针往左推送,直至不再降序时退出。 

    最后 从左指针 到 右指针 之间的值 断言是否为 降序

算法如下: 

#include<iostream>

using namespace std;

int main(){
int len=0;
cin>>len;
int* array = new int[len];
for(int i=0;i<len;i++){
cin>>array[i];
}
int l=0,r=len-1;
while(l<r){
if(array[l]<array[l+1]) l++;
else break;
}
while(r>l){
if(array[r]>array[r-1]) r--;
else break;
}

if(l>=r){
cout<<"no"<<endl;
delete array;
return 0;
}else{
while(l<r){
if(array[l] >array[l+1] ) l++;
else break;
}
}
if(l==r) cout<<"yes"<<endl;
else cout<<"no"<<endl;
delete array;
return 0;
}

  但是,我提交测试用例的时候,通过率只有80%,不知道为什么。鉴于自己是个算法方面的小白,剩下的20%就放过自己。  并且,在未通过的那个测试用例,我直观来看,确实是符合翻转数组的要求的,不知道为什么。 

举报

相关推荐

0 条评论