腾讯面试:
如何把一个数组循环右移K位
如:12345678 右移2位 78123456
思路如下:
1:首先逆序123456,那么数组变为65432178
2:再逆序78,那么数组变为65432187
3:最后逆序整个数组:65432187 ,那么数组变为78123456
那么如何逆序呢?
定义两个变量,begin和end,分别指向需要逆序的数组的起始位置,
通过临时变量temp,进行交换,直到begin>=end 结束
如:12345678 右移2位 78123456
思路如下:
1:首先逆序123456,那么数组变为65432178
2:再逆序78,那么数组变为65432187
3:最后逆序整个数组:65432187 ,那么数组变为78123456
那么如何逆序呢?
定义两个变量,begin和end,分别指向需要逆序的数组的起始位置,
通过临时变量temp,进行交换,直到begin>=end 结束
- package datastruct.usearray;
- import java.util.Scanner;
- public class Shift_k {
- private static void shift_method(int array[],int k) {
- int n=array.length-1;
- k=k%n; //为了防止k>n ,右移K位和右移k%n的结果是一样的
- shift_method(array, 0, n-k);
- shift_method(array, n-k+1, n);
- shift_method(array, 0, n);
- System.out.println("右移"+k+"位的结果为:");
- for (int i : array) {
- System.out.print(i+" ");
- }
- }
- private static void shift_method(int array[],int begin,int end) {
- int temp;
- while (begin=end 结束
- temp=array[begin];
- array[begin]=array[end];
- array[end]=temp;
- begin++;
- end--;
- }
- }
- public static void main(String[] args) {
- Scanner sc=new Scanner(System.in);
- System.out.println("输入数组元素个数:");
- int n=sc.nextInt();
- int array[]=new int[n];
- System.out.println("输入"+n+"个数组元素:");
- for (int i = 0; i < n; i++) {
- array[i]=sc.nextInt();
- }
- System.out.println("输入移动的位数:");
- int k=sc.nextInt();
- shift_method(array, k);
- }
- }
运行结果如下:

本文介绍了一种将数组中的元素循环右移K位的有效方法。通过三次逆序操作实现目标,详细展示了每一步骤的执行过程及代码实现。
167

被折叠的 条评论
为什么被折叠?



