思路:烧饼排序
- 定义排序函数getRes(vector nums,int n);作用是将第n个数变为nums的[0,n]中最大的。然后递归调用getRes(nums,n-1);当n=0,为base case。
- 在getRes中,找到索引[0,n]中最大的一个数,然后将[0,max]反转,在[0,n]反转。res.push_back(max+1);res.push_back(n+1);
- 因为最后返回的res里面的元素不是索引,而是第几个元素,从1开始。
class Solution {
public:
vector<int> res;
void back(vector<int>& nums,int n){
for(int i=0;i<=n/2;i++){
int temp=nums[i];
nums[i]=nums[n-i];
nums[n-i]=temp;
}
}
void getRes(vector<int> &nums,int n){
if(n==0) return ;
int max=0;
for(int i=0;i<=n;i++){
if(nums[max]<nums[i]) max=i;
}
back(nums,max);
res.push_back(max+1);
back(nums,n);
res.push_back(n+1);
getRes(nums,n-1);
}
vector<int> pancakeSort(vector<int>& arr) {
getRes(arr,arr.size()-1);
return res;
}
};