Leetcode 969. Pancake Sorting(详细解析)

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;
        }
    }
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值