21 調整陣列22 鍊錶倒數k

2021-10-06 23:05:32 字數 1224 閱讀 8229

21.輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有奇數字於陣列的前半部分,所有偶數字於陣列的後半部分。

示例:輸入:nums = [1,2,3,4]

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

注:[3,1,2,4] 也是正確的答案之一。

1 <= nums.length <= 50000

1 <= nums[i] <= 10000

雙指標呀,乙個指頭乙個指尾,遇到偶數/奇數的時候,idx+/- 1 ,然後互換位置。

class solution(object):

def exchange(self, nums):

""":type nums: list[int]

:rtype: list[int]

"""if not nums:

return nums

odd_idx = 0

even_idx = len(nums)-1

while odd_idx22.輸入乙個鍊錶,輸出該鍊錶中倒數第k個節點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾節點是倒數第1個節點。例如,乙個鍊錶有6個節點,從頭節點開始,它們的值依次是1、2、3、4、5、6。這個鍊錶的倒數第3個節點是值為4的節點。

示例:給定乙個鍊錶: 1->2->3->4->5, 和 k = 2.

返回鍊錶 4->5.

class solution:

def getkthfromend(self, head: listnode, k: int) -> listnode:

former, latter = head, head

for _ in range(k):

if not former: return

former = former.next

while former:

former, latter = former.next, latter.next

return latter

還是雙指標。一開始兩個指標都指向head,要考慮到k的值可能大於鍊錶長度,所以 for裡面 if not former 判斷一下。第乙個for迴圈相當於確定了當前鍊錶的第乙個(latter)和第k個(former)的節點。這時候兩個指標都往後移動一位,直到former移動到了最後乙個節點。 那麼latter就是倒數第k個節點了。 我一開始想著是儲存長度為k的列表呢。 現在想想沒必要,中間的資料可以不要的 。 這樣 空間複雜度o(k)減少到o(1)了。

劍指Offer 九 調整陣列 鍊錶倒數第k個節點

輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。方法1借用冒泡的思想,每兩項比較,如果前偶後奇就交換。複雜度為o n 2 方法2空間換時間 新建乙個陣列,遍歷給定陣列,求出這個陣列...

劍指 22 鍊錶中倒數第k個結點

題目描述 演算法分析 提交 class solution return i k nullptr slownode 兩次遍歷 listnode findkthtotail2 listnode plisthead,unsigned int k if k listlength return nullptr...

Q22鍊錶的倒數第k個節點

輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。最後乙個為倒數第1個。遍歷一遍得到鍊錶長度,再遍歷一遍得到倒數第幾個,複雜度為o n 2 o n 2 o n2 只遍歷一遍的方法為 維持兩個指標,兩個指標 差為 k 1 然後同時往前走,第乙個走到尾,第二個正好就是倒數第k個。struct listnode ...