leetcode第31題下乙個排列

2021-10-10 04:37:27 字數 804 閱讀 1071

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

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

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

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

1,2,3 → 1,3,2

3,2,1 → 1,2,3

1,1,5 → 1,5,1

void reverse(int *nums, int numssize)

return;}

void swap(int *a, int *b)

int cmp(const void *a, const void *b)

void nextpermutation(int* nums, int numssize)

int i, j;

for(i = numssize - 2; i >= 0; i--)}}

} /* 如果不存在更大排列, 則反序 */

reverse(nums, numssize)

;return

;}

補充:qsort函式,這個是c語言內建的快速排序,它的時間複雜度為n*log(n),標頭檔案為stdlib.h,如何排序是根據cmp函式的返回值來決定。

a.返回值小於0,p1所指向的元素會被排在p2所指向的元素前面。

b.返回值等於0,p1所指向的元素與p2所指向的元素的順序不確定。

c.返回值大於0,p1所指向的元素會被排在p2所指向的元素後面。

leetcode 第31題 下乙個排列

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

LeetCode第496題 下乙個更大元素 I

給定兩個沒有重複元素的陣列 nums1 和 nums2 其中nums1 是 nums2 的子集。找到 nums1 中每個元素在 nums2 中的下乙個比其大的值。nums1 中數字 x 的下乙個更大元素是指 x 在 nums2 中對應位置的右邊的第乙個比 x 大的元素。如果不存在,對應位置輸出 1。...

LeetCode 下乙個排列(31)

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