数组的下一个排列

给一个数组,想象一下它的全排列,求出这个数组在全排列中的下一个排列

数组的下一个排列

 

 编程思路:

1、顺序是按从小到大排序的,即把index 记录下来,pair=【【x1,y1】,【x2,y2】………【xn,yn】】

2、新建一个变量pos=pair【-1】【0】+1,也就是最后一个小大顺序的第一个位置

pair列表里的最后一个列表代表的array两个位置元素互换

3、array里的元素从pos开始,从小到大排序

上完整代码:

 1 class Solution():
 2     def next_series(self,array):
 3         pair=[]
 4         ls=len(array)
 5         for i in range(ls):
 6             for j in range(i+1,ls):
 7                 if array[i]<array[j]:
 8                     pair.append([i,j])
 9         pos=0
10         if len(pair)>0:
11             pos=pair[-1][0]+1
12             self.swap(array,pair[-1][0],pair[-1][1])
13         for i in range(pos,ls):
14             for j in range(i+1,ls):
15                 if array[i]>array[j]:
16                     self.swap(array,i,j)
17         return(array)
18         
19     def swap(self,array,x,y):
20         array[x],array[y]=array[y],array[x]
21 
22 s=Solution()
23 print(s.next_series([1,2,3,5,6]))

 

易错点:

swap(array,x,y)不能简化成swap(x,y),

1 #正确做法
2 def swap(array,x,y):
3     array[x],array[y]=array[y],array[x]
4 a=[1,2,3,4,5]
5 swap(a,3,4)
6 print(a)
1 #在函数中使用全局变量,不是个好习惯,不推荐
2 def swap(x,y):
3     array[x],array[y]=array[y],array[x]
4 array=[1,2,3,4,5]
5 swap(3,4)
6 print(array)
1 #运行不正确,列表a的34位没有调换
2 def swap(x,y):
3     x,y=y,x
4 a=[1,2,3,4,5]
5 swap(a[3],a[4])
6 print(a)
1 #运行倒是正确了,就是太麻烦了
2 def swap(x,y):
3     x,y=y,x
4     return(x,y)
5 a=[1,2,3,4,5]
6 a[3],a[4]=swap(a[3],a[4])
7 print(a)

 

运行无故障,glad to help you,欢迎留言交流。

 

上一篇:cf340 D. Bubble Sort Graph(思维,最长上升子序列)


下一篇:Spark GraphX 应用示例