博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
力扣(LeetCode)31
阅读量:7250 次
发布时间:2019-06-29

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

题目地址:

题目描述:

实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。

如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。

必须原地修改,只允许使用额外常数空间。

以下是一些例子,输入位于左侧列,其相应输出位于右侧列。

1,2,3 → 1,3,2
3,2,1 → 1,2,3
1,1,5 → 1,5,1

解答:

直接给出步骤:
1从右到左扫描数组找出第一个升序对(nums[j-1],nums[j])
2从右到左扫描数组找出第一个大于nums[j-1]的数nums[k]
3交换nums[j-1],nums[k]
4对num[j...nums.length-1]转置。

java ac代码:

class Solution {    public void nextPermutation(int[] nums) {        boolean flag = true;        int i = 0;        for(;i < nums.length-1;i++)            if(nums[i] < nums[i+1])            {                flag = false;                break;            }        if(flag)        {            int x = 0,y = nums.length-1;            while(x < y)            {                swap(nums,x,y);                x++;                y--;            }        }        else        {            i = nums.length-1;            while(i >= 1)                if(nums[i] <= nums[i-1])i--;            else break;            int j = nums.length-1;            for(;j >= 0;j--)                if(nums[j] > nums[i-1])break;            swap(nums,i-1,j);            int x = i,y = nums.length-1;            while(x < y)            {                swap(nums,x,y);                x++;                y--;            }        }                    }        void swap(int[] nums,int x,int y)    {          int temp = nums[x];          nums[x] = nums[y];          nums[y] = temp;            }}

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

你可能感兴趣的文章
LeeCode-Sort Colors
查看>>
Snort2.9.2.3 Installation on CentOS 6.2
查看>>
我的友情链接
查看>>
给软件工程师的自学建议
查看>>
Linux下SVN的备份方式
查看>>
hadoop 3.0.0 alpha1 分布式搭建
查看>>
刘宇凡:从吃饭中的道理领悟SEO
查看>>
1.1办公软件概述
查看>>
python中http的一些编码转换
查看>>
5.继续看W3C的 bootstrap
查看>>
PHP中include和require
查看>>
第一次标题
查看>>
H3C ospf router id 重复真的不能建立邻居吗?
查看>>
【symfoware OPEN】数据库基本操作
查看>>
iphone:截屏
查看>>
Mac 下 VirtualBox ubuntu 共享空间
查看>>
CENTOS6.3利用Keepalived构建双主MySQL+双机热备
查看>>
常用算法收集
查看>>
listview的简单使用(Baseadapter)
查看>>
Oracle导入程序Imp的使用详解
查看>>