leetcode 969. 煎饼排序

题解

首先复制A的值到B,对B进行倒序排列,然后遍历B的值,并找出其在A中的位置,接着进行两次翻转,第一次翻转会先把值放在首位,第二次翻转则会把值依次放在后面,最终会完成排序

示例代码(go)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
func pancakeSort(A []int) []int {
length := len(A)
res := make([]int, 0)
B := make([]int, 0)
B = append(B, A...)
sort.Sort(sort.Reverse(sort.IntSlice(B)))
for i, v := range B {
index := find(A, v)
res = append(res, index + 1)
res = append(res, length - i)
reverse(A, index + 1)
reverse(A, length - i)
}
return res
}

func find(arr []int, num int) int {
for i, v := range arr {
if num == v {
return i
}
}
return -1
}

func reverse(arr []int, k int) {
for i := 0; i < (k / 2); i++ {
arr[i], arr[k-i-1] = arr[k-i-1], arr[i]
}
}