• LeetCode--031--下一个排列(java)*


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

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

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

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

     
    1 //1 3 4 7 2 1 找到第一个 nums[i] < nums[i+1]的 i firstsmall = 2 找到第一个大于nums[firstsmall]的 firstlarge = 3 2 //1 3 7 4 2 1 将nums[firstlarge] 和nums[firstsmall]进行swap 3 //1 3 7 1 2 4 将firstsmall 到最后进行逆序
     1 //1 3 4 7 2 1
     2 //1 4 3 7 2 1
     3 //1 4 1 2 7 3
     4 class Solution {
     5     public void nextPermutation(int[] nums) { 
     6         if(nums == null || nums.length == 0)return;
     7         int firstsmall = -1;
     8         int firstlarge = -1;
     9         for(int i = nums.length - 2;i >= 0;i--){
    10             if(nums[i] < nums[i + 1]){
    11                 firstsmall = i;
    12                 break;
    13             }
    14         }
    15         if(firstsmall == -1){
    16             reverse(nums,0,nums.length - 1);
    17             return;
    18         }
    19         for(int i = nums.length - 1;i > firstsmall;i--){
    20             if(nums[i] > nums[firstsmall]){
    21                 firstlarge = i;
    22                 break;
    23             }
    24         }
    25         swap(nums,firstsmall,firstlarge);
    26         reverse(nums,firstsmall + 1,nums.length-1);
    27         return;
    28     }
    29     public void swap(int[] nums,int i,int j){
    30         int temp = nums[i];
    31         nums[i] = nums[j];
    32         nums[j] = temp;
    33     }
    34     public void reverse(int[] nums,int i,int j){
    35         while(i < j){
    36             swap(nums,i++,j--);  
    37         }
    38     }
    39 }

    2019-04-25 18:11:25

  • 相关阅读:
    List装form
    《Java设计模式》之调停者模式(Mediator)
    android 4.0 禁用系统home键
    最大权二分匹配
    hdu 3667 /2010哈尔滨赛区H题 费用与流量为非线性关系/费用流
    【python】filter()
    【python】linux将python改为默认3.4版本
    【linux】VMware12.0安装
    【python】lxml-The E-factory
    【xml】python的lxml库使用
  • 原文地址:https://www.cnblogs.com/NPC-assange/p/10770094.html
Copyright © 2020-2023  润新知