fucking-algorithm icon indicating copy to clipboard operation
fucking-algorithm copied to clipboard

烧饼排序算法 :: labuladong的算法小抄

Open labuladong opened this issue 3 years ago • 7 comments

文章链接点这里:烧饼排序算法

评论礼仪 见这里,违者直接拉黑。

labuladong avatar Feb 05 '22 08:02 labuladong

是不是简化版汉诺塔?

fornobugworld avatar Apr 09 '22 12:04 fornobugworld

是不是简化版汉诺塔?

我看到一半也想起汉诺塔了

zhongweiLeex avatar Apr 10 '22 02:04 zhongweiLeex

done

ywj1352 avatar May 03 '22 02:05 ywj1352

应该是优先反转有序的部分

861130245 avatar May 12 '22 12:05 861130245

js

/**
 * @param {number[]} arr
 * @return {number[]}
 */
var pancakeSort = function (arr) {

    // 在n个中找到最大的 然后铲起它 翻转其上的所有饼 这样他就到了最上面 然后翻转所有饼 这样最大的就到了最下面
    // 在对n-1个饼 进行此过程 直到n==1 返回 已经排好序了 
    // 以上思想很容易想到递归 在每次翻转的时候记录翻转序列中最大的数字

    let res = [];
    mysort(arr.length);
    function mysort(n) {
        let maxCakeIndex = 0, maxCake = 0;
        if (n == 1) return; // 就一个煎饼 不用翻转
        // 找到最大的煎饼 记录下索引
        for (let i = 0; i < n; i++) {
            if (arr[i] > maxCake) {
                maxCake = arr[i];
                maxCakeIndex = i;
            }
        }


        // 翻转 使得最大的煎饼在上面
        myreverse(0, maxCakeIndex);
        res.push(maxCakeIndex + 1);

        // 翻转 使得最大的煎饼到下面
        myreverse(0, n - 1);
        res.push(n);
        // console.log(arr);

        mysort(n - 1); // 
    }
    function myreverse(i, j) {
        while (i < j) {
            let temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
            i++;
            j--;
        }
    }
    return res;



};

Leochens avatar May 22 '22 02:05 Leochens

最后那个思考题,是不是可以双向BFS来解,起点终点都有了,要求最短路径。

potatogit avatar Jul 15 '22 10:07 potatogit

我看开头就想起了汉诺塔,但是这题用递归有些过于复杂了,用冒泡排序每次把最大值沉底应该会快一些

Maxiah avatar Aug 03 '22 08:08 Maxiah

哈哈哈看到這個題目真的好好笑

Gao-kai avatar Sep 04 '22 13:09 Gao-kai