美文网首页
31.下一排列

31.下一排列

作者: New_Learner | 来源:发表于2019-05-14 11:59 被阅读0次

    给定一个数列,寻找按字典序排列比它大的下一数列,如果不存在比它大的数列,则寻找字典序最小的数列。

    考虑两种情况:1.逆序数组不存在字典序比它大的情况,这时候返回升序数组即可。2.当不是逆序数组时呢?我们必然能找到一个顺序对,如 5 4 2 3 1 中 2 和 3 就是顺序的,它的下一排列是 5 4 3 1 2 。以这个例子为例,将顺序对中较大的数字放于较小的位置,并对接下来的数组做排序。如果存在多个顺序对?如 5 1 2 3 4 ,这时候要考虑哪个顺序对的前者最远, 这里最远的顺序对是 3 4 所以下一排列 5 1 2 4 3 ,再考虑如果前者一样呢, 如 5 4 1 2 3 ,这个例子里 1 2 和 1 3 都是顺序对,那就考虑后者较小的那个,以 1 2 来重排列。

    总结:关键在于找顺序对,使用两个指针,first 用于指向顺序对的开头, second 用于指向比first 大的较小值。

    找顺序对的主要思路是先寻找 first 只要后者大于前者就行。一直迭代自然会指向较后的顺序对。

    相关文章

      网友评论

          本文标题:31.下一排列

          本文链接:https://www.haomeiwen.com/subject/gdujaqtx.html