LeetCode題解 31 下乙個排列

2021-09-25 19:10:46 字數 931 閱讀 8047

實現獲取下乙個排列的函式,演算法需要將給定數字序列重新排列成字典序中下乙個更大的排列。

如果不存在下乙個更大的排列,則將數字重新排列成最小的排列(即公升序排列)。

必須原地修改,只允許使用額外常數空間。

以下是一些例子,輸入位於左側列,其相應輸出位於右側列。

1,2,3 → 1,3,2

3,2,1 → 1,2,3

1,1,5 → 1,5,1

離散數學及其應用書中有乙個next字典序最大排列的演算法偽**:

解答版本1:

1、

class solution 

}if(!norev)

}}else

} }

改進版本1:在步驟將i位置替換為(i,size-1]內大於nums[i]的下乙個字典序排列時:

因為排列為【nums[i] ,大於nums[i] ,待尋找區間】 for迴圈手動尋找index =待尋找區間內 大於nums[i]的最小數,swap(i,index),然後sort(i+1,end)

class solution 

}if(!norev)

// }

int right = nums[i+1];

int index =i;

for(int j=i+1 ; jnums[i])}}

//swap

int tmp =nums[i];

nums[i] =nums[index];

nums[index] =tmp;

arrays.sort(nums,i+1,nums.length);

}else

} }

leetcode 31 下乙個排列

實現獲取下乙個排列的函式,演算法需要將給定數字序列重新排列成字典序中下乙個更大的排列。如果不存在下乙個更大的排列,則將數字重新排列成最小的排列 即公升序排列 必須原地修改,只允許使用額外常數空間。以下是一些例子,輸入位於左側列,其相應輸出位於右側列。1,2,3 1,3,2 3,2,1 1,2,3 1...

leetCode 31 下乙個排列

思路就是找到可以變大的最低位,進一步說,就是找到,nums pos 滿足,存在q使得,q pos 且 nums pos nums q 同時要注意的是,最終的答案要取q的下界。這是因為要找剛剛好比所給數字大的數字,所以我們要使得pos位,增大的盡量小。class solution else if nu...

LeetCode31 下乙個排列

實現獲取下乙個排列的函式,演算法需要將給定數字序列重新排列成字典序中下乙個更大的排列。如果不存在下乙個更大的排列,則將數字重新排列成最小的排列 即公升序排列 必須原地修改,只允許使用額外常數空間。以下是一些例子,輸入位於左側列,其相應輸出位於右側列。1,2,3 1,3,2 3,2,1 1,2,3 1...