主要思路:
- 方法1: 由于题目说明是循环左移动,因此可以考虑借鉴循环队列的思路,如果数组是一个循环队列的话,左移动实际上也只是将头指针进行移动,但是题目说明在不建立另外的数组的前提下进行操作,因此,可以考虑建立顺序存储下的循环队列,将数据直接写入队列中。
- 方法2: 逆转法,分别先对前半部分和后半部分进行逆转,然后在对整个数组进行逆转,时间复杂度:O(m/2)+ O((n-m)/2)+O(n/2)=O(3n/2)
#include<stdio.h>
void reverse(int a[], int lo,int hi)//数组逆转函数
{
int i=lo,j = hi;
while(i<j)
{
int temp = a[i];
a[i] = a[j];
a[j]=temp;
i++;
j--;
}
}
int main()
{
int n,m;
scanf("%d %d",&