博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode之Next Permutation (Medium)
阅读量:2342 次
发布时间:2019-05-10

本文共 1396 字,大约阅读时间需要 4 分钟。

题目描述:

Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers.

If such arrangement is not possible, it must rearrange it as the lowest possible order (ie, sorted in ascending order).

The replacement must be in-place, do not allocate extra memory.

Here are some examples. Inputs are in the left-hand column and its corresponding outputs are in the right-hand column.
1,2,3 → 1,3,2
3,2,1 → 1,2,3
1,1,5 → 1,5,1

题意

求一个序列的下一个排列。

分析:

可以用 STL 里的 ‘next_permutation’ 偷懒。

具体算法是:

首先,从最尾端开始往前寻找两个相邻的元素,令第一个元素是 i,第二个元素是 ii,且满足 i<ii ;

然后,再从最尾端开始往前搜索,找出第一个大于 i 的元素,设其为 j;
然后,将 i 和 j 对调,再将 ii 及其后面的所有元素反转。

python code如下:

class Solution:    # @param num, a list of integer    # @return nothing (void), do not return anything, modify num in-place instead.    def nextPermutation(self, num):        if not len(num):            return        idx = len(num) - 2        # 1. find out the last wrong order        while idx >= 0 and num[idx] >= num[idx + 1]:            idx -= 1        # 2. swap        if idx >= 0:            i = idx + 1            while i < len(num) and num[i] > num[idx]:                i += 1            num[i - 1], num[idx] = num[idx], num[i - 1]        # 3. reverse        left, right = idx + 1, len(num) - 1        while left <= right:            num[left], num[right] = num[right], num[left]            left += 1            right -= 1

转载地址:http://glbvb.baihongyu.com/

你可能感兴趣的文章
java项目之——坦克大战09
查看>>
java项目之——坦克大战10
查看>>
java项目之——坦克大战11
查看>>
用sed批量替换文件中的字符
查看>>
九型性格心理测试 (From Ulla Zang荣格的个人性格测验题目)
查看>>
[MT] 3.32升级备忘
查看>>
MT 3.33发布: 安全漏洞修正
查看>>
给Blog加上雅虎通PingMe服务:和网站用户即时聊天
查看>>
顶级域名注册分布统计:2006年09月 .com .de .net .uk .cn
查看>>
雅虎通可以批量添加MSN用户了
查看>>
豆瓣“我上”:一个blog就是一本有趣的书
查看>>
速度比较:GMail/MSN/Yahoo!Mail
查看>>
搜索引擎来路关键词的挖掘:百度统计的高级分析报告导出获取来源关键词
查看>>
C/C++题目--拷贝构造函数概念
查看>>
C/C++题目--深复制与浅复制
查看>>
数据结构教程--李春葆版(总结)之线性表-顺序存储结构练习题
查看>>
linux文件类型
查看>>
alias,which命令
查看>>
析构函数何时被调用
查看>>
C++虚函数底层机制
查看>>