标签:pos tco some https Plan cep max private put
原题链接在这里:https://leetcode.com/problems/pancake-sorting/
题目:
Given an array A
, we can perform a pancake flip: We choose some positive integer k <= A.length
, then reverse the order of the first k elements of A
. We want to perform zero or more pancake flips (doing them one after another in succession) to sort the array A
.
Return the k-values corresponding to a sequence of pancake flips that sort A
. Any valid answer that sorts the array within 10 * A.length
flips will be judged as correct.
Example 1:
Input: [3,2,4,1]
Output: [4,2,4,3]
Explanation:
We perform 4 pancake flips, with k values 4, 2, 4, and 3.
Starting state: A = [3, 2, 4, 1]
After 1st flip (k=4): A = [1, 4, 2, 3]
After 2nd flip (k=2): A = [4, 1, 2, 3]
After 3rd flip (k=4): A = [3, 2, 1, 4]
After 4th flip (k=3): A = [1, 2, 3, 4], which is sorted.
Example 2:
Input: [1,2,3]
Output: []
Explanation: The input is already sorted, so there is no need to flip anything.
Note that other answers, such as [3, 3], would also be accepted.
Note:
1 <= A.length <= 100
A[i]
is a permutation of [1, 2, ..., A.length]
题解:
Find the max index up to largest.
swap [0, max index]
swap [0, largest]
repeat n times.
Time Complexity: O(n^2). n = A.length.
Space: O(1).
AC Java:
1 class Solution { 2 public List<Integer> pancakeSort(int[] A) { 3 List<Integer> res = new ArrayList<>(); 4 if(A == null){ 5 return res; 6 } 7 8 int n = A.length; 9 int largest = n; 10 for(int i = 0; i<n; i++){ 11 int maxIndex = -1; 12 int max = Integer.MIN_VALUE; 13 14 for(int j = 0; j<largest; j++){ 15 if(A[j] >= max){ 16 maxIndex = j; 17 max = A[j]; 18 } 19 } 20 21 swap(A, maxIndex); 22 swap(A, largest-1); 23 res.add(maxIndex + 1); 24 res.add(largest--); 25 } 26 27 return res; 28 } 29 30 private void swap(int [] arr, int k){ 31 for(int i = 0, j = k; i<j; i++, j--){ 32 int temp = arr[i]; 33 arr[i] = arr[j]; 34 arr[j] = temp; 35 } 36 } 37 }
标签:pos tco some https Plan cep max private put
原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/12047200.html