不理解翻转技巧

时间:2015-03-08 15:31:19

标签: algorithm swap

我正在尝试解决一个名为Stack of Flapjacks的问题。但不幸的是,我没有理解这个问题。所以我尝试了Google并找到了a better explanation。这个解释说翻转(k)。但我不知道该怎么做。有人请帮我解释一下。提前致谢。

1 个答案:

答案 0 :(得分:0)

以下是原始ACM问题中的相关内容:

  翻转包括在一个堆叠中的两个煎饼之间插入一把刮刀,并将刮刀上的薄煎饼翻转(翻转)(反转子堆叠)。通过给出要翻转的子堆栈底部的薄饼的位置(相对于整个堆叠)来指定翻盖。整个堆栈底部的煎饼位置为1,n层煎饼顶部的煎饼位置为n。

翻转(k)意味着从1..k逆转煎饼的顺序。部分问题在于弄清楚如何做到这一点!

使用问题中的示例,让我们说你实现了这样的煎饼堆栈:

int[] pancakes = [8, 4, 6, 7, 5, 2];

翻转操作可能写成:

int flip(int pos) {
    int spare;
    for (int i = 1; i < pos/2; i++) {
        // swap element [i] with element [pos-i+1]
        spare = pancakes[i];
        pancakes[i] = pancakes[pos-i+1];
        pancakes[pos-i+1] = spare;
    }
}

翻转(3)仅交换[1]和[3],[2]保持原位
flip(4)将交换[1]和[4]然后交换[2]和[3]