Advertisement
Guest User

Gokking #25255

a guest
Jul 7th, 2022
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 0.99 KB | None | 0 0
  1. class Solution {
  2.     public void nextPermutation(int[] nums) {
  3.         int i = -1;
  4.  
  5.         // 1. find last increasing pair
  6.         for (int j = 0; j < nums.length - 1; j++) {
  7.             if (nums[j] < nums[j + 1]) {
  8.                 i = j;
  9.             }
  10.         }
  11.         if (i == -1) {
  12.             reverse(nums, 0);
  13.             return;
  14.         }
  15.  
  16.         // 2. from i + 1, find last k, that nums[k] > nums[i];
  17.         int k = i + 1;
  18.         for (int j = i + 1; j < nums.length; j++) {
  19.             if (nums[j] > nums[i]) {
  20.                 k = j;
  21.             }
  22.         }
  23.  
  24.         swap(nums, i, k);
  25.  
  26.         // 3. reverse from i + 1 to end
  27.         reverse(nums, i + 1);
  28.     }
  29.  
  30.     void swap(int[] nums, int i, int j) {
  31.         int tmp = nums[i];
  32.         nums[i] = nums[j];
  33.         nums[j] = tmp;
  34.     }
  35.  
  36.     void reverse(int[] nums, int start) {
  37.         int i = start, j = nums.length - 1;
  38.  
  39.         while (i < j) {
  40.             swap(nums, i++, j--);            
  41.         }
  42.     }
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement