假设有一个有 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部分提出来)