一、问题描述
二、思路分析
根据这几天做题,我发现考研题难度确实大,而且这尼玛题目总是搞得让你看不懂,总体来说思路不是很好想。那么这种情况下该如何准备代码题呢?我认为还是得多练,多见,见得多了也就有点思路了。像链表或者顺序表的代码题,很多可以用双指针来解决,之所以能想到双指针是因为两个指针可以在O(n)时间复杂度下对顺序表遍历两次而无需使用双重循环。
回归到本题,也是使用了双指针,但是题目首先不太容易看懂,其次就是思路也确实不太好想,这只能靠多刷题来总结了。
三、代码实现
#include<stdio.h>
//这里循环终止设置了两个条件,目的在于:
//1、使左右指针能够一直向对方移动
//2、防止左右指针碰撞
void reverse(int a[],int left,int right,int k){
for(int i=left,j=right;i<=left+k && i<j;i++,j--){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
int main(){
int array[8] = {1,2,3,4,5,6,7,8};
reverse(array,0,2,3);
reverse(array,3,7,5);
reverse(array,0,7,8);
for(int i=0;i<=7;i++){
printf("%d\t",array[i]);
}
return 0;
}