Leetcode 969. Pancake Sorting
题目链接: Pancake Sorting
难度:Medium
题目大意:
给一组数,这组数由从1到n(数组的长度)组成的且任意两个数不重复,每次可以将任意前K个数翻转,要求经过若干次翻转后使整个数组按升序排列。把每次操作的K的值记录下来,最后输出。
思路:
先找到最大的数,把它翻转到数组的首部,再翻转到数组的最后,这样这个最大的数就放在了正确的位置上。依次对剩余未排序的数进行类似操作,直到所有的数都已排序好。
代码
class Solution {
public List<Integer> pancakeSort(int[] A) {
int n=A.length;
List<Integer> res=new ArrayList<>();
for(int i=A.length;i>0;i--){
int index;//每次循环找到数组中等于i的元素,把它放到A[i-1]
for(index=0;A[index]!=i;index++);
reverse(A,index+1);//把等于i的元素换到A[0]
res.add(index+1);
reverse(A,i);//把等于i的元素换到A[i-1]
res.add(i);
}
return res;
}
public void reverse(int[] A,int k){
//对数组A的前k个数进行反转
for(int i=0,j=k-1;i<j;i++,j--){
int temp=A[i];
A[i]=A[j];
A[j]=temp;
}
}
}