Python演算法高階 6(分隔鍊錶)

2021-10-02 18:28:51 字數 1348 閱讀 3555

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

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

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

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

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

示例 1:

輸入: 

root = [1, 2, 3], k = 5

輸出: [[1],[2],[3],,]

解釋:輸入輸出各部分都應該是鍊錶,而不是陣列。

例如, 輸入的結點 root 的 val= 1, root.next.val = 2, \root.next.next.val = 3, 且 root.next.next.next = null。

第乙個輸出 output[0] 是 output[0].val = 1, output[0].next = null。

最後乙個元素 output[4] 為 null, 它代表了最後乙個部分為空鍊錶。

示例 2:

輸入: 

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

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

解釋:輸入被分成了幾個連續的部分,並且每部分的長度相差不超過1.前面部分的長度大於等於後面部分的長度。

root 的長度範圍: [0, 1000].

輸入的每個節點的大小範圍:[0, 999].

k 的取值範圍: [1, 50].

class solution(object):

def splitlisttoparts(self, root, k):

cur = root

for n in xrange(1001):

if not cur:

break

cur = cur.next

width, remainder = divmod(n, k)

ans =

cur = root

for i in xrange(k):

head = write = listnode(none)

for j in xrange(width + (i < remainder)):

write.next = write = listnode(cur.val)

if cur:

cur = cur.next

return ans

86 分隔鍊錶

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

86 分隔鍊錶

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

197 分隔鍊錶

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