问题描述:将一个一维数组平移k位,多出来的部分放到前面。要求空间复杂度为1.
解题思路:先将数组前len-k项逆置,再将后k项逆置,然后在将整个数组逆置。
代码:
package mango.list;
/**
* @since 2016/10/22
* @author mango
* @descripe 将一个一维数组平移k位,多出来的部分放到前面
*/
public class P018Test10 {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
arr = solve(arr, 3);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
/**
* 算法核心
* @param arr
* @return
* 解题思路:先将数组前len-k项逆置,再将后k项逆置,然后在将整个数组逆置
*/
private static int[] solve(int[] arr,int k) {
arr = inverse(arr,0,arr.length-k-1);
arr = inverse(arr,arr.length-k,arr.length-1);
arr = inverse(arr,0,arr.length-1);
return arr;
}
//数组逆置
public static int[] inverse(int[] arr,int start,int end){
while(start<end){
arr[start] = arr[start]+arr[end];
arr[end] = arr[start]-arr[end];
arr[start] = arr[start]-arr[end];
start++;end--;
}
return arr;
}
}