77 lines
2.4 KiB
Python
77 lines
2.4 KiB
Python
class Solution(object):
|
|
def merge(self, nums1, m, nums2, n):
|
|
"""
|
|
:type nums1: List[int]
|
|
:type m: int
|
|
:type nums2: List[int]
|
|
:type n: int
|
|
:rtype: void Do not return anything, modify nums1 in-place instead.
|
|
"""
|
|
sorted_list = [None] * (m + n)
|
|
pointer_1 = m - 1
|
|
pointer_2 = n - 1
|
|
pointer = m + n - 1
|
|
while(pointer >=0):
|
|
if pointer_1 >= 0 and pointer_2 >= 0:
|
|
if nums1[pointer_1] > nums2[pointer_2]:
|
|
sorted_list[pointer] = nums1[pointer_1]
|
|
pointer_1 -= 1
|
|
else:
|
|
sorted_list[pointer] = nums2[pointer_2]
|
|
pointer_2 -= 1
|
|
elif pointer_1 >= 0:
|
|
sorted_list[pointer] = nums1[pointer_1]
|
|
pointer_1 -= 1
|
|
elif pointer_2 >= 0:
|
|
sorted_list[pointer] = nums2[pointer_2]
|
|
pointer_2 -= 1
|
|
else:
|
|
assert False, "Pointers are broken!"
|
|
pointer -= 1
|
|
# because Python does not allow me to change to
|
|
# nums1 = sorted_list
|
|
for index in range(0, len(nums1)):
|
|
if len(nums1) > 0:
|
|
nums1.pop()
|
|
|
|
for index in range(0,len(sorted_list)):
|
|
nums1.append(sorted_list[index])
|
|
|
|
import unittest
|
|
class SolutionTestCase(unittest.TestCase):
|
|
def setUp(self):
|
|
self.solution = Solution()
|
|
|
|
def test_empty(self):
|
|
nums1 = []
|
|
nums2 = []
|
|
self.solution.merge(nums1, len(nums1), nums2, len(nums2))
|
|
self.assertEqual(nums1, [])
|
|
|
|
def test_just_nums1(self):
|
|
nums1 = [0]
|
|
nums2 = []
|
|
self.solution.merge(nums1, len(nums1), nums2, len(nums2))
|
|
self.assertEqual(nums1, [0])
|
|
|
|
def test_just_nums2(self):
|
|
nums1 = []
|
|
nums2 = [0]
|
|
self.solution.merge(nums1, len(nums1), nums2, len(nums2))
|
|
self.assertEqual(nums1, [0])
|
|
|
|
def test_mine(self):
|
|
nums1 = [1,4,5,8]
|
|
nums2 = [2,3,6,7,9]
|
|
self.solution.merge(nums1, len(nums1), nums2, len(nums2))
|
|
self.assertEqual(nums1, [1,2,3,4,5,6,7,8,9])
|
|
|
|
def test_mine(self):
|
|
nums1 = [1,4,5,8]
|
|
nums2 = [2,3,6,7,8,9]
|
|
self.solution.merge(nums1, len(nums1), nums2, len(nums2))
|
|
self.assertEqual(nums1, [1,2,3,4,5,6,7,8,8,9])
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|