假设有一个有 n 个元素的数组,求该数组右移 k 个元素后的数组,要求算法的空间复杂度为 O(1) 。
输入数据右三行,第一行表示数组元素个数 n ,第二行表示数组,第三行表示 k
7
1,2,3,4,5,6,7
3
输出
5,6,7,1,2,3,4
void rightMoveK(vector<int>& arr, int k) { int n = arr.size(); if (n == 0) return; int i = 0; while (i < n-1) { int j = n - k;//每次都从n-k位置开始右移 while (j < n)//每次右移k个数 { swap(arr[j++], arr[i++]);//就地交换 } } }思路解释:
import java.util.Arrays; import java.util.Scanner; /** * @author: sanjin * @date: 2019/9/29 16:22 */ public class Main { public static void main(String[] args) { Scanner s = new Scanner(System.in); int n = Integer.parseInt(s.nextLine()); int[] nums = new int[n]; String s1 = s.nextLine(); for (int i = 0; i < n; i++) { nums[i] = Integer.parseInt(s1.split(",")[i]); } int k = Integer.parseInt(s.nextLine()); for (int i = 0; i < k; i++) { shiftRightOnece(nums); } System.out.println(Arrays.toString(nums)); } static void shiftRightOnece(int[] nums) { if (nums.length == 0) return; int t = nums[nums.length - 1]; for (int i = nums.length - 2; i >= 0; i--) { nums[i + 1] = nums[i]; } nums[0] = t; } }
#include <stdio.h> int main(int argc, char *argv[]) { int a[10000], i,j,k,n,m; scanf("%d", &n); for (i = 0; i < n; i++){ scanf("%d", &a[i]); } scanf("%d", &m); j = n + m; for (i = n - m; i <= j; i++){ printf("%d", a[i >= n ? i - n: i]); if (i < j) { printf(","); } } return 0; }
public class Two { public static void main(String [] args){ int length; int pos; Scanner sc=new Scanner(System.in); length=sc.nextInt(); int [] num=new int[length]; for(int i=0;i<length;i++){ num[i]=sc.nextInt(); } pos=sc.nextInt(); // System.out.print(num[0]+num[6]); GetPos(num,length,pos); } public static int[] GetPos(int [] A,int length,int pos){ int f=0,l=length-1; while(f<l){ int count=A[l]; A[l]=A[f]; A[f]=count; f++; l--; } f=0;l=length-1;int m=pos-1; while(f<m){ int count=A[m]; A[m]=A[f]; A[f]=count; f++; m--; } while(pos<l){ int count=A[pos]; A[pos]=A[l]; A[l]=count; pos++; l--; } // System.out.print(A[0]+A[6]); for(int i=0;i<length;i++){ System.out.print(A[i]); } return A; } :注:代码比较繁琐,但是可以简化为一个函数,调用三次就可以啦(吧while部分提出来)