zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Java多线程知识-Callable和Future
    C#程序集Assembly学习随笔(增补版,附图)_AX
    C#程序集Assembly学习随笔(第一版)_AX
    【.Net】 C#访问修饰符
    访问修饰符(C# 编程指南)
    Restful API 架构与设计参考原则
    RESTful API 设计指南
    WebService的两种方式SOAP和REST比较
    公众号
    es6(const、let)
  • 原文地址:https://www.cnblogs.com/NPC-assange/p/10770094.html
Copyright © 2011-2022 走看看