美文网首页
编程之美 - 翻烙饼 Java 实现

编程之美 - 翻烙饼 Java 实现

作者: NetCdSc | 来源:发表于2020-04-29 15:48 被阅读0次

翻烙饼问题是非常经典的问题, 星期五的晚上, 一帮同事在希格玛大厦附近的硬盘酒吧多喝了几杯程序员多喝了几杯之后谈什么呢? 自然是算法问题有个同事说:
我以前在餐馆打工, 顾客经常点非常多的烙饼店里的饼大小不一, 我习惯在到达顾客饭桌前, 把一摞饼按照大小次序摆好小的在上面, 大的在下面由于我一只手托着盘子, 只好用另一只手, 一次抓住最上面的几块饼, 把它们上下颠倒个个儿, 反复几次之后, 这摞烙饼就排好序了

import java.util.Arrays;

public class Pizza {
    public static void main(String[] args) {
        //一堆饼
        int[] arr = {5, 6, 1, 3, 2, 8};
        sort(arr, arr.length);
        System.out.println(Arrays.toString(arr));

    }

    /**
     * 递归翻转排序
     * @param arr 饼
     * @param endPos 从 0 ~ endPos 处排序
     */
    static void sort(int[] arr, int endPos) {
        if (endPos == 0) {
            return;
        }
        int maxIndex = getMaxIndex(arr, endPos);
        reverse(arr, maxIndex);
        reverse(arr, endPos - 1);
        endPos--;
        sort(arr, endPos);
    }

    /**
     * 翻转
     * @param arr 饼
     * @param endPos 从 0 ~ endPos 处开始翻转
     */
    static void reverse(int[] arr, int endPos) {
        int startPos = 0;
        int temp;
        while (startPos < endPos) {
            temp = arr[startPos];
            arr[startPos] = arr[endPos];
            arr[endPos] = temp;
            startPos++;
            endPos--;
        }
    }

    /**
     * 从 0 ~ endPos 中获取最大的饼的下标
     * @param arr 饼
     * @param endPos 结束位置
     * @return 最大下标
     */
    static int getMaxIndex(int[] arr, int endPos) {
        int maxIndex = 0;
        for (int i = 0; i < endPos; i++) {
            maxIndex = i;
            for (int j = 0; j < endPos; j++) {
                if (arr[j] > arr[maxIndex]) {
                    maxIndex = j;
                }
            }
        }
        return maxIndex;
    }


}

相关文章

  • 编程之美 - 翻烙饼 Java 实现

    翻烙饼问题是非常经典的问题, 星期五的晚上, 一帮同事在希格玛大厦附近的硬盘酒吧多喝了几杯程序员多喝了几杯之后谈什...

  • 读 GitChat 线程三部曲 笔记

    GitChat线程三部曲 Java 编程之美 - 线程相关的基础知识 Java 编程之美:并发编程高级篇之一 Ja...

  • Java并发编程之美系列汇总

    Java并发编程之美系列汇总,大家可以挑选自己感兴趣的的进行订阅。 Java 并发编程之美:线程相关的基础知识ht...

  • 并发编程之美-终章chat

    一、Java 并发编程之美:并发编程高级篇之五 微信扫码二维码加入本 Chat 作为 Java 并发编程之美系列的...

  • 整理所需的知识点

    书籍 《深入理解JVM虚拟机》 《Java设计模式》 《Java编程思想》 《编程之美》 《剑指offer》 《大...

  • 电梯调度问题——《编程之美》Java实现

    来自《编程之美》电梯调度问题:亚洲微软研究院所在的希格玛大厦一共有6部电梯。在高峰时间,每层都有人上下,电梯每层都...

  • 2019-08-16-Java中实现的锁的区别和简单实现

    Java中实现的锁的区别和实现的原理 在开发Java多线程应用程序中,各个线程之间由于要共享资源,必须用到锁机制。...

  • Java并发编程之美

    一、前言 并发编程相比 Java 中其他知识点学习门槛较高,从而导致很多人望而却步。但无论是职场面试,还是高并发/...

  • 烙饼美妇

    文/李晓 昨天在地铁里看见一个妈妈牵着孩子,孩子一直吵着说要吃东西,放学肚子饿。她妈妈不屑一顾地说不行,吃了东西回...

  • android 书籍

    深入理解 Android 内核设计思想 实战Gradle kotlin实战 编程珠玑 编程之美 java核心技术卷...

网友评论

      本文标题:编程之美 - 翻烙饼 Java 实现

      本文链接:https://www.haomeiwen.com/subject/clqnwhtx.html