• 31. 下一个排列


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

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

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

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

    class Solution {
        public void nextPermutation(int[] nums) {
            //从右向左遍历,找到正序数停下,记为i - 1,i。
            //从i开始,向右遍历,找到比i - 1处大的值,swap
            //反转从i到结尾数字
            if(nums == null || nums.length <= 1) return;
            int i = nums.length - 2;
            while(i >= 0 && nums[i] >= nums[i + 1]){
                i--;
            }
            if(i >= 0){
                int j = nums.length - 1;
                while(j > i && nums[j] <= nums[i]){
                    j--;
                }
                swap(nums,i,j);    
            }
            reverse(nums,i + 1,nums.length - 1);
        }
        private void swap(int[] nums,int i,int j){
            int tem = nums[i];
            nums[i] = nums[j];
            nums[j] = tem;
        }
        private void reverse(int[] nums,int i,int j){
            while(i < j){
                swap(nums,i,j);
                i++;
                j--;
            }
        }
    }
    一回生,二回熟
  • 相关阅读:
    python笔记---@classmethod @staticmethod
    python笔记--socket编程
    python笔记--异常处理
    WebStorm 配置
    ECS node 环境搭建
    spm + host
    Untuntu的apt 终端命令
    Ubuntu 添加至启动栏
    Ubuntu设置镜像源
    Ubuntu 设置中文语言环境
  • 原文地址:https://www.cnblogs.com/zzytxl/p/12663271.html
Copyright © 2020-2023  润新知