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

2021-09-27 09:43:13 字數 1607 閱讀 9699

輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。

方法1借用冒泡的思想,每兩項比較,如果前偶後奇就交換。 複雜度為o(n^2)

方法2空間換時間 ,新建乙個陣列,遍歷給定陣列,求出這個陣列中的奇數的個數記作a,再遍歷一遍陣列,遇到奇數放a-1的前面,否則放後面。

方法3插入排序的思想

public

void

reorderarray

(int

array)}}

}public

void

reorderarray1

(int

array)

}int

copy = array.

clone()

;//轉殖陣列

int a =0;

//分開計算位置 如果只用i 會出現重複賦值

for(

int i =

0; i < copy.length; i++

)else}}

public

void

reorderarray3

(int

array)

k++;}

}}

輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。

方法1 遍歷兩遍鍊錶,白給

方法2 建立棧,每次push乙個節點,個數加一,當某個節點的next為空,push k個節點.

方法3由於是倒數第k個,那麼從最後乙個節點到最後乙個需要走 k-1 次

建立快慢指標,快指標先走 k-1 步,然後兩個指標同時走,後乙個指標的next 為空 ,前乙個指標指向的節點就是目標節點.

1-2-3-4-5-6-7 求倒數第3 個,應該返回 5

快指標先走到了 3 ,那麼當快指標到7,慢指標也就到了5

//棧

public listnode findkthtotail2

(listnode head,

int k)

//可以先把鍊錶反轉,然後找出第k個

stack

stack =

newstack

();int count =0;

while

(head != null)

if(count < k)

int i =0;

listnode node = null;

while

(i < k)

return node;

}public listnode findkthtotail

(listnode head,

int k)

listnode slow = head;

listnode fast = head;

for(

int i =

1; i < k; i++

) fast = fast.next;

}while

(fast.next != null)

return slow;

}

劍指offer 調整陣列順序

時間限制 1秒 空間限制 32768k 本題知識點 陣列 題目描述 輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。首先想到的是利用兩個輔助陣列,乙個儲存奇數,乙個儲存偶數,這樣的...

劍指offer(調整陣列順序)

輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。1 暴力解法 從前到位掃瞄陣列,如果出現前面是偶數後面是奇數的情況,則交換。其中使用氣泡排序的思想。從後面朝前比較,使用外迴圈控制趟...

劍指offer(十三) 調整陣列順序

題目描述 輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。題解 思路簡單的解法就是,建兩個臨時陣列,乙個奇數陣列,乙個偶數陣列,最後再組合起來即可,時間複雜度為o n 一解 pub...