algorithmic-studies/leetcode/leetcode_088.py

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()