合併有序陣列

2021-10-04 08:21:41 字數 1686 閱讀 9253

描述

給你兩個有序整數陣列 nums1 和 nums2,請你將 nums2 合併到 nums1 中,使 num1 成為乙個有序陣列。

說明:初始化 nums1 和 nums2 的元素數量分別為 m 和 n 。

你可以假設 nums1 有足夠的空間(空間大小大於或等於 m + n)來儲存 nums2 中的元素。

思路和**

建議從後往前遍歷,因為從前往後遍歷會更改元素,要麼就要移動元素。

class

solution

while

(j >=0)

}};

描述

將兩個公升序鍊錶合併為乙個新的公升序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。

示例:輸入:1->2->4, 1->3->4

輸出:1->1->2->3->4->4

思路和**

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

else

p = p-

>next;}if

(l1)

if(l2)

return dummy-

>next;}}

;

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。

示例:輸入:

[1->4->5,

1->3->4,

2->6

]輸出: 1->1->2->3->4->4->5->6

思路和**

歸併的思路

class

solution

listnode*

merge

(vector>

&lists,

int left,

int right)

listnode*

mergertwolists

(listnode *l1, listnode *l2)

else}}

;

用o(logn)鍊錶排序

class

solution

fast = slow;

slow = slow-

>next;

fast-

>next =

null

;//排序兩個子鍊錶

listnode* l1 =

sortlist

(head)

; listnode* l2 =

sortlist

(slow)

;//兩個有序鍊錶合併

return

sort

(l1, l2);}

listnode*

sort

(listnode* l1, listnode* l2)

else

p = p-

>next;}if

(l1)

p->next = l1;

if(l2)

p->next = l2;

return dummy-

>next;}}

;

合併有序陣列

時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述 給你兩個有序且公升序的陣列,請你把它們合成乙個公升序陣列並輸出 give you two ordered ascending array,you put them into one ascending array and ou...

合併有序陣列

給你兩個有序整數陣列 nums1 和 nums2,請你將 nums2 合併到 nums1 中,使 nums1 成為乙個有序陣列。說明 初始化 nums1 和 nums2 的元素數量分別為 m 和 n 你可以假設 nums1 有足夠的空間 空間大小大於或等於 m n 來儲存 nums2 中的元素。vo...

合併有序陣列問題

有這樣乙個問題,現在有兩個有序的陣列,第乙個陣列的空間足夠容納兩個有序陣列中的數,利用高效的方法把兩個陣列合併,並使得陣列是有序的,且最後得到的是第乙個陣列,同時不借助其他額外的儲存空間。其實這種題的解法幾乎都是一樣的,都是從最後乙個數開始,這就是取極值的思想,因為陣列是有序的,所以,每個陣列中最大...