實現獲取下乙個排列的函式,演算法需要將給定數字序列重新排列成字典序中下乙個更大的排列。如果不存在下乙個更大的排列,則將數字重新排列成最小的排列(即公升序排列)。必須原地修改,只允許使用額外常數空間。以下是一些例子,輸入位於左側列,其相應輸出位於右側列。
1,2,3 → 1,3,2
3,2,1 → 1,2,3
1,1,5 → 1,5,1
研究分析隨機的乙個陣列,例如
下乙個更大排列 15498
下乙個更大排列 15849
下乙個更大排列 15894
下乙個更大排列 15948
下乙個更大排列 15984
下乙個更大排列 18459
…規律分析
1.15489,9和8交換,得到下乙個更大排列,15498
2.15498,4和8交換,得158 94,交換位置後面的94,做從小到大排序,得到下乙個更大排列,15849
3.15984,5和8交換,得18 954,交換位置後面的954,做從小到大排序,得到下乙個更大排列,18459
----從右往左,指標i,定位第一次降序的位置,即9~4是乙個降序,定位到4,nums[i]=4。同樣從右往左,指標j,定位第乙個比nums[i]小的數,nums[j]進行交換,然後把nums[i]後面的數做乙個公升序排序。
----如果沒有降序,說明當前排列已經是最大排列,整個陣列做乙個排序即可。
class
solution}}
arrays.
sort
(nums)
;//如果以上if語句不成立,說明該排列已經是最大排列,按題意排成最小排列
}}
leetcode 31 下乙個排列(陣列)
實現獲取下乙個排列的函式,演算法需要將給定數字序列重新排列成字典序中下乙個更大的排列。如果不存在下乙個更大的排列,則將數字重新排列成最小的排列 即公升序排列 必須原地修改,只允許使用額外常數空間。以下是一些例子,輸入位於左側列,其相應輸出位於右側列。1,2,3 1,3,2 3,2,1 1,2,3 1...
搜尋旋轉排序陣列 leetcode31
假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,1,2,4,5,6,7 可能變為 4,5,6,7,0,1,2 搜尋乙個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 1 你可以假設陣列中不存在重複的元素。你的演算法時間複雜度必須是 o log n 級別。示例...
leetcode 31 下乙個排列
實現獲取下乙個排列的函式,演算法需要將給定數字序列重新排列成字典序中下乙個更大的排列。如果不存在下乙個更大的排列,則將數字重新排列成最小的排列 即公升序排列 必須原地修改,只允許使用額外常數空間。以下是一些例子,輸入位於左側列,其相應輸出位於右側列。1,2,3 1,3,2 3,2,1 1,2,3 1...