LeetCode 標籤 陣列31 下乙個排列

2021-10-08 18:55:28 字數 902 閱讀 5852

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

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...