leetcode 86 分隔鍊錶

2021-09-18 06:04:32 字數 1152 閱讀 5293

給定乙個頭結點為root的鍊錶, 編寫乙個函式以將鍊錶分隔為k個連續的部分。

每部分的長度應該盡可能的相等: 任意兩部分的長度差距不能超過 1,也就是說可能有些部分為 null。

這k個部分應該按照在鍊錶**現的順序進行輸出,並且排在前面的部分的長度應該大於或等於後面的長度。

返回乙個符合上述規則的鍊錶的列表。

舉例: 1->2->3->4, k = 5 // 5 結果 [ [1], [2], [3], [4], null ]

輸入:root = [1, 2, 3], k = 5輸出:[[1],[2],[3],,]
輸入:root = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], k = 3輸出:[[1, 2, 3, 4], [5, 6, 7], [8, 9, 10]]

求得鍊錶的長度 n

取 n / k, n % k

分割k個鍊錶,每個鍊錶 n / k個元素,其中前 n%k個鍊錶多加一項

如果結果不足k個,那麼在結尾處補充空陣列

python

class solution:

def splitlisttoparts(self, root: listnode, k: int) -> list:

len = 0

tmp = root

while tmp:

len, tmp = len+1, tmp.next

mod, rem = len//k, len%k

res =

while root and k:

tmp, n = res[-1], mod-1 + (1 if rem > 0 and mod else 0)

while n > 0:

tmp, n = tmp.next, n-1

root, tmp.next = tmp.next, none

k -= 1

rem -= 1

res += [ for _ in range(k)]

return res

Leetcode86 分隔鍊錶

題目描述 給定乙個鍊錶和乙個特定值x,對鍊錶進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。你應當保留兩個分割槽中每個節點的初始相對位置。示例 輸入 head 1 4 3 2 5 2,x 3 輸出 1 2 2 4 3 5演算法描述 此題有兩種解法,第一種就是將所有小於給定值的節點取...

leetcode86 分隔鍊錶

給定乙個鍊錶和乙個特定值x,對鍊錶進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。你應當保留兩個分割槽中每個節點的初始相對位置。示例 輸入 head 1 4 3 2 5 2,x 3 輸出 1 2 2 4 3 5 把所有小於給定值的節點都移到前面,大於該值的節點順序不變。將所有小於給...

leetcode86分隔鍊錶

給定乙個鍊錶和乙個特定值 x,對鍊錶進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。你應當保留兩個分割槽中每個節點的初始相對位置。示例 輸入 head 1 4 3 2 5 2,x 3 輸出 1 2 2 4 3 5 新建兩個鍊錶,給定的特定值。對鍊錶分隔,將小於特定值的節點放在乙個鍊...