leetcode1053

 1 class Solution:
 2     def prevPermOpt1(self, A: 'List[int]') -> 'List[int]':
 3         n = len(A)
 4         for i in range(n-1,0,-1):
 5             if A[i-1] > A[i]:
 6                 cur = A[i-1]
 7                 B = A[i:]
 8                 maxB = 0
 9                 maxIndex = i
10                 for j in range(len(B)):
11                     if cur > B[j] and B[j] >= maxB:
12                         maxB = max(maxB,B[j])
13                         maxIndex = j
14                 A[i-1],A[i+maxIndex] = A[i+maxIndex],A[i-1]
15                 return A
16         return A

先寻找需要替换的项,从后向前寻找。如果前项>后项,那么这个“前项”就是要被替换的。

然后在这个项的右侧区域中寻找用于交换的位置。寻找比“前项”的值小的值中的最大的那个,同样的值选择位置靠后的。

关键的代码是10~13行。

猜你喜欢

转载自www.cnblogs.com/asenyang/p/10925611.html
今日推荐