这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战
leetcode地址: leetcode-cn.com/problems/pa…
class Solution {
boolean isSorted(int[] array) {
for (int i = 0; i < array.length - 1; i++) {
if (array[i] > array[i + 1])
return false;
}
return true;
}
public List<Integer> pancakeSort(int[] arr) {
List<Integer> result = new ArrayList<>();
int length = arr.length;
for (int i = length - 1; i >= 0; i--) {
if (isSorted(arr)) return result;
int maxIndex = 0;
// 先找最大值
for (int j = 0; j <= i; j++) {
if (arr[maxIndex] < arr[j]) {
maxIndex = j;
}
}
// 翻转0-maxIndex
reverse(arr, 0, maxIndex);
result.add(maxIndex + 1);
// 翻转0-i
reverse(arr, 0, i);
result.add(i + 1);
}
return result;
}
public void reverse(int[] arr, int i, int j) {
while (i < j) {
int temp = arr[i];
arr[i++] = arr[j];
arr[j--] = temp;
}
}
}
思路: 煎饼排序简单解释就是对于数组的某一段进行翻转, 使逐渐排好序. 根据这个特性, 可以使用冒泡排序的思维, 先从后开始循环n次(数组长度), 每次找到最大的值, 然后翻转到指针指向位, 逐步排好序即可
官方[3,2,4,1] => 可为[3, 4, 2, 3, 1, 2]
如图: