leetcode習題集 31 下乙個排列

2021-09-13 17:44:15 字數 1375 閱讀 3731

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

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

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

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

1,2,3 → 1,3,2

3,2,1 → 1,2,3

1,1,5 → 1,5,1

public

class

p30_nextpermutation

if(i==0)

else

}swap

(nums,minindex,i-1)

; arrays.

sort

(nums,i,nums.length)

;return;}

}private

void

swap

(int

arr,

int i,

int j)

}

思路:

從後向前遍歷陣列,直到找到乙個nums[i-1] > nums[i]的i值

交換num[i-1]和num[minindex],其中num[minindex]為下標為i~len-1的num中大於num[i-1]的最小值

交換完成後重新排列num[i~len-1]

public

void

nextpermutation

(int

nums)

if(i >=0)

swap

(nums, i, j);}

reverse

(nums, i +1)

;}private

void

reverse

(int

nums,

int start)

}private

void

swap

(int

nums,

int i,

int j)

leetcode官方思路:

同演算法1 從後向前遍歷陣列,直到找到乙個nums[i-1] > nums[i]的i值

可知nums[i] ~ nums[len-1]是逆序排列的,把其中最後乙個大於num[i-1]的數和nums[i-1]交換

交換完成之後nums[i] ~ nums[len-1]還是逆序排列,只需要倒置num[i] ~ num[len-1]即可。

Leetcode習題集 鍊錶

這裡記錄一些我刷題的思路方便之後進行複習重溫,同時也方便進行新增 p141 環形鍊錶 class solution listnode reverse listnode head return pre 使用翻轉鍊錶,判斷返回的指標與傳進的指標是否相同,時間複雜度是o n 可能 空間複雜度是o 1 cl...

leetcode習題集 54 螺旋矩陣

給定乙個包含 m x n 個元素的矩陣 m 行,n 列 請按照順時針螺旋順序,返回矩陣中的所有元素。示例 1 輸入 1,2,3 4,5,6 7,8,9 輸出 1,2,3,6,9,8,7,4,5 示例 2 輸入 1,2,3,4 5,6,7,8 9,10,11,12 輸出 1,2,3,4,8,12,11...

leetcode習題集 56 合併區間

給出乙個區間的集合,請合併所有重疊的區間。示例 1 輸入 1,3 2,6 8,10 15,18 輸出 1,6 8,10 15,18 解釋 區間 1,3 和 2,6 重疊,將它們合併為 1,6 示例 2 輸入 1,4 4,5 輸出 1,5 解釋 區間 1,4 和 4,5 可被視為重疊區間。public...