• 31. 下一个排列


    31. 下一个排列

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

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

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

    示例 1:

    输入:nums = [1,2,3]
    输出:[1,3,2]
    示例 2:

    输入:nums = [3,2,1]
    输出:[1,2,3]
    示例 3:

    输入:nums = [1,1,5]
    输出:[1,5,1]
    示例 4:

    输入:nums = [1]
    输出:[1]

    题干的意思是:找出这个数组排序出的所有数中,刚好比当前数大的那个数

    比如当前 nums = [1,2,3]。这个数是123,找出1,2,3这3个数字排序可能的所有数,排序后,比123大的那个数 也就是132

    如果当前 nums = [3,2,1]。这就是1,2,3所有排序中最大的那个数,那么就返回1,2,3排序后所有数中最小的那个,也就是1,2,3 -> [1,2,3]

    class Solution {
        public void nextPermutation(int[] nums) {
            if (nums == null || nums.length == 0) return;
            int firstIndex = -1;
            for (int i = nums.length - 2; i >= 0; i--)
            {
                if (nums[i] < nums[i + 1])
                {
                    firstIndex = i;
                    break;
                }
            }
            if (firstIndex == -1) {
                reverse(nums, 0, nums.length - 1);
                return;
            }
            int secondIndex = -1;
            for (int i = nums.length - 1; i >= 0; i--) {
                if (nums[i] > nums[firstIndex]) {
                    secondIndex = i;
                    break;
                }
            }
            swap(nums, firstIndex, secondIndex);
            reverse(nums, firstIndex + 1, nums.length - 1);
            return;
    
        }
    
        private void reverse(int[] nums, int i, int j) {
            while (i < j) {
                swap(nums, i++, j--);
            }
        }
    
        private void swap(int[] nums, int i, int i1) {
            int tmp = nums[i];
            nums[i] = nums[i1];
            nums[i1] = tmp;
        }
    }
    

      

  • 相关阅读:
    ORA-01207: file is more recent than control file
    ORA-08189
    oracle 修改表空间存储路径
    oracle 日志文件管理
    Oracle ClusterwarePRCT-1011 : Failed to run "oifcfg".&nb
    linux:文件打包与压缩
    linux:查找搜索文件
    Python:lambda表达式(匿名函数)
    网络协议各层概述
    linux:用户及文件权限管理
  • 原文地址:https://www.cnblogs.com/ziytong/p/14998791.html
Copyright © 2020-2023  润新知