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