ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【Leetcode-每日一题】煎饼排序

2022-02-20 13:34:40  阅读:147  来源: 互联网

标签:pre arr end idx int 最大值 煎饼 排序 Leetcode


煎饼排序
难度:中等
在这里插入图片描述
在这里插入图片描述
通过翻转,我们可以将最大值放到最右边的位置。
具体实现:每次获取剩余数组中的最大值下标,判断当前下标是否在最右侧,若在最右侧则无需处理,若不在最右侧则分为两种情况

  1. 该最大值在第一位,则只需要一次翻转即可将该值置于最右侧
  2. 该最大值不在第一位,则将起始位置到该值所处位置的元素翻转,此时最大值将会成为第一位,再重复步骤1。

代码如下:

	public List<Integer> pancakeSort(int[] arr) {
        List<Integer> res = new ArrayList<>();
        int r = arr.length-1;
        while(r>0){
            int idx = max(arr, r);
            if (idx==r){
                r--;
                continue;
            }
            if (idx!=0){
                reverse(arr,idx);
                res.add(idx+1);
            }
            reverse(arr,r);
            res.add(r+1);
            r--;
        }
        return res;
    }

    //将arr数组的前r位翻转
    private void reverse(int[] arr, int r) {
        int pre = 0;
        int end = r;
        while(pre<end){
            arr[end] = arr[pre] ^ arr[end];
            arr[pre] = arr[pre] ^ arr[end];
            arr[end] = arr[pre] ^ arr[end];
            pre++;
            end--;
        }
    }

    //求arr数组前k位的最大值下标
    public int max(int[] arr,int k){
        int idx = 0;
        for (int i = 1; i <= k; i++) {
            if (arr[i]>arr[idx]) idx = i;
        }
        return idx;
    }

执行结果:成功
在这里插入图片描述

标签:pre,arr,end,idx,int,最大值,煎饼,排序,Leetcode
来源: https://blog.csdn.net/qq_39143263/article/details/123018796

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有