LeetCode第969题 煎饼排序
LeetCode第969题 煎饼排序
题目
给你一个整数数组 arr ,请使用 煎饼翻转 完成对数组的排序。
一次煎饼翻转的执行过程如下:
选择一个整数 k ,1 <= k <= arr.length
反转子数组 arr[0…k-1](下标从 0 开始)
例如,arr = [3,2,1,4] ,选择 k = 3 进行一次煎饼翻转,反转子数组 [3,2,1] ,得到 arr = [1,2,3,4] 。
以数组形式返回能使 arr 有序的煎饼翻转操作所对应的 k 值序列。任何将数组排序且翻转次数在 10 * arr.length 范围内的有效答案都将被判断为正确。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/pancake-sorting
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
答案
方法一
class Solution {List<Integer> result = new ArrayList<>();public List<Integer> pancakeSort(int[] arr){for (int i = 1; i < arr.length; i++) {int index = get(arr, i);
// LogUtils.info("i = {}, index = {}", i, index);if (index == 0) {flip(arr, i - 1);flip(arr, i);} else if(index != i){flip(arr, i);flip(arr, i - index);flip(arr, i - index - 1);flip(arr, i);}}return result;}/*** 返回指定数会出现的位置* @param arr* @param end* @return*/public int get(int[] arr, int end){int left = 0;int right = end - 1;while(left <= right){int mid = left + ((right - left) >> 1);if(arr[mid] > arr[end]){right = mid - 1;} else if(arr[mid] < arr[end]){left = mid + 1;} else {return mid;}}return left;}/*** 翻转0~n数组的数值* @param arr* @param end*/public void flip(int [] arr, int end){if(end < 1){return;}result.add(end + 1);int left = 0;int right = end;while(left < right){int mid = arr[left];arr[left] = arr[right];arr[right] = mid;left++;right--;}
// LogUtils.info("end = {}, arr = {}", end, (Object) arr);}
}
答案解析.将数组分为两个部分,数组左侧为长度为i+1的递增数组,右侧无序数组,每次从右侧无序数组中取出第一个数,并获得该数应当插入到左侧数组的位置index,对index进行判断:
- 当index == 0时,执行两次翻转,翻转数组
0~i-1
的数组,然后翻转0~i
之间的数组 - 当index == i时,不执行操作
- 当index != 0 && index != 0 时,翻转(
0~i
),(0~i-index
),(0~i-index-1
),(0~i
)
LeetCode第969题 煎饼排序相关推荐
- leetcode算法题--煎饼排序
原题链接:https://leetcode-cn.com/problems/pancake-sorting/ 算法思路: 1.在未排序的数中找出最大的一个数 2.两次排序,将这个数放在最后,这是已经排 ...
- java删除有序数组中的重复元素_算法刷刷刷Leetcode第26题删除排序数组中的重复项...
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度.不要使用额外的数组空间,你必须在原地修改输入数组 并在使用 O(1) 额外空间的条件下完成.示例 ...
- Leetcode每日一题总目录(动态更新。。。)
0. 概要 leecode每日一题(也可能多题)题解跟踪记录及总目录. 常用算法解题思路和技巧及数据结构: 预处理:数组排序(954),哈希表... 双指针法 682,125,905 单向链表 2 双 ...
- 【Leetcode】 刷题之路1(python)
leetcode 刷题之路1(python) 看到有大佬总结了一些相关题目,想着先刷一类. 1.两数之和 15.三数之和 16.最接近的三数之和 11.盛最多的水 18.四数之和 454.四数相加II ...
- leetcode贪心算法题集锦(持续更新中)
leetcode贪心算法题集锦 leetcode贪心算法题集锦(持续更新中).python 和C++编写. 文章目录 leetcode贪心算法题集锦 一.贪心算法 1.盛最多水的容器 2.买股票的最佳 ...
- [Leetcode][第39题][JAVA][组合总和][回溯][dfs][剪枝]
[问题描述][中等] [解答思路] 1. 回溯 import java.util.ArrayDeque; import java.util.ArrayList; import java.util.De ...
- [剑指offer]面试题第[57]题[Leetcode][第167题][JAVA][和为s的两个数字][两数之和][HashSet][二分][双指针]
[剑指offer]面试题第[57]题[Leetcode][第167题][第1题] 有序无序之分 题目输出不同之分 以下解法按照[剑指offer]面试题第[57]题进行题解 [问题描述][简单] 输入一 ...
- 【LeetCode每日一题】1723. 完成所有工作的最短时间
[LeetCode每日一题]1723. 完成所有工作的最短时间 [1] 1723. 完成所有工作的最短时间 [2] 473. 火柴拼正方形 [1] 1723. 完成所有工作的最短时间 题目: 给你一个 ...
- LeetCode部分刷题笔记!!!JavaScript!!!
详细解说请看视频JS老毕:人人都能看得懂的Leetcode力扣刷题教程合集 边看视频边记录笔记!!!部分题目在视频中无! 文章目录 LeetCode第1题:1. 两数之和 LeetCode第2题:2. ...
最新文章
- 洛谷P3572 [POI2014]PTA-Little Bird
- LVM逻辑卷创建管理
- WinDbg配置和使用基础
- QTreeWidgetItem和QTreeWidgetItemIterator
- Java培训教程:Java中的位移运算符!
- ie11上vue中使用elementui的input框无法输入中文
- WINCE6 同时支持简繁体
- 科研这条路:一位数学博士给本科生的建议
- 3月第四周全球域名解析商:万网DNSPod排名均上升1名
- java过滤lsit重复_java 8 中获取List结合中过滤后的重复数据
- 《半吊子全栈系列:Boostrap3》
- IT部门不应忽略的12种数据
- Windows Server AD修改还原模式密码
- 红帆参加HiMSS 2010(2010亚太区卫生信息大会)
- 亚马逊alexa智能家电_如何使用Amazon Alexa轻松设置智能家居设备
- QA与SQA到底有什么区别和联系?他们的职责和工作内容是什么?QC,QM又是什么?
- Wpremig的AH之战题解
- txt文本怎么去除重复项
- Java趣味编程(一)
- 奥迪A6(C5)遥控器钥匙更换电池后无法使用的适配(对码)方法