Tag:排序
题目
给定一个整数数组arr,一次煎饼反转的执行过程如下:选择一个整数k, 1 <= k <= arr.length 反转子数组arr0…k - 1 以数组形式返回能使arr有序的煎饼翻转操作所对应的k值序列。
代码
class Solution {
private LinkedList<Integer> ans = new LinkedList<>();
public List<Integer> pancakeSort(int[] arr) {
sort(arr, arr.length);
return ans;
}
private void sort(int[] cakes, int n) {
if(n == 1) return;
int maxCake = 0;
int maxCakeIndex = 0;
for(int i = 0; i < n; i++) {
if(cakes[i] > maxCake) {
maxCakeIndex = i;
maxCake = cakes[i];
}
}
// 第一次翻转,将最大烧饼翻到最上面
reverse(cakes, 0, maxCakeIndex);
ans.add(maxCakeIndex + 1);
// 第二次翻转,将最大烧饼翻到最下面
reverse(cakes, 0, n - 1);
ans.add(n);
sort(cakes, n - 1);
}
private void reverse(int[] arr, int i, int j) {
while(i < j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;j--;
}
}
}