当
n
u
m
s
[
i
]
<
n
u
m
s
[
i
+
1
]
nums[i]<nums[i+1]
nums[i]<nums[i+1],选定
n
u
m
s
+
i
nums+i
nums+i作为需要被交换的数。这一步确保
n
u
m
s
[
i
]
nums[i]
nums[i]右侧是一个降序序列。
再次从右往左遍历
n
u
m
s
nums
nums,当前位置是
j
j
j,当
n
u
m
s
[
j
]
>
n
u
m
s
[
i
]
nums[j]>nums[i]
nums[j]>nums[i],选取
n
u
m
s
+
j
nums+j
nums+j作为被交换的第二个数。
由于
2
2
2的操作,
n
u
m
s
[
i
]
nums[i]
nums[i]右侧的排列,是右侧的最大排列。反转
n
u
m
s
[
i
]
nums[i]
nums[i]右边所有数字,得到
n
u
m
s
[
i
]
nums[i]
nums[i]右侧的最小排列。
找到了~下一个排列!
四、代码分析
理解思路很重要!
欢迎读者在评论区留言,作为日更博主,看到就会回复的。
五、AC
六、复杂度分析
时间复杂度:
O
(
n
)
O(n)
O(n) ,
n
n
n是
n
u
m
s
nums
nums的大小,二次遍历
n
u
m
s
nums
nums的时间复杂度是
O
(
n
)
O(n)
O(n)。