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