package day05;
import java.util.Arrays;
public class RotateArray {
public static void main(String[] args) {
int [] numS = {1,2,3,4,5,6,7}; // k = 3,-->5 6 7 1 2 3 4
int k = 3;
//rotate(numS,k);
rotate02(numS,k);
System.out.println(Arrays.toString(numS));
}
//要求 原地 算法
//思路1:移位法
public static void rotate(int [] numS, int k) {
if(numS == null || numS.length == 0) {
return;
}
if(k == 0) {
return;
}
if(k > numS.length) {
k = k % numS.length;
}
int j = 0;
int i = numS.length;
while (k > 0) {//向右移动k位
int tmp = numS[i - 1];//每次需要移动的数字都会是最后一位
for(j = i - 2; j >= 0; j --) {
numS[j + 1] = numS[j];
}
//每次插入的位置的是数组是前面
numS[0] = tmp;
k --;
}
}
//从结果中我们可以看出,就是需要将数组的 后k个数字 截取 放到 前n - k 个数字的 前面-->字符串操作
public static void rotate02(int [] nums, int k) {
if(nums == null || nums.length == 0 || k == 0) {
return;
}
if(k > nums.length) {
k = k % nums.length;
}
StringBuilder back = new StringBuilder();
StringBuilder front = new StringBuilder();
int len = nums.length;
for(int i = 0; i < len; i ++) {//{1,2,3,4,5,6,7}
if(i < len - k) {
front.append(nums[i]);
} else {
back.append(nums[i]);
}
}
String res = back.toString() + front.toString();
int index = 0;
while (index < len) {
nums[index] = Integer.parseInt(res.substring(index,index+1));
index ++;
}
}
}
旋转数组的原地实现
最新推荐文章于 2021-10-18 20:32:24 发布