任务预览(2天)
【数组】
- 实现一个支持动态扩容的数组
- 实现一个大小固定的有序数组,支持动态增删改操作
- 实现两个有序数组合并为一个有序数组
- 学习哈希表思想,并完成leetcode上的两数之和(1)及Happy Number(202)!(要求全部用哈希思想实现!)(选做)(注意:在第四天会进行继续学习)
- 练习:
Three Sum(求三数之和)
Majority Element(求众数)
Missing Positive(求缺失的第一个正数)
【链表】
- 实现单链表、循环链表、双向链表,支持增删操作
- 实现单链表反转
- 实现两个有序的链表合并为一个有序链表
- 实现求链表的中间结点
- 练习:
Linked List Cycle I(环形链表)
Merge k Sorted Lists(合并 k 个排序链表)
一,数组
1,实现一个大小固定的有序数组,支持动态增删改操作
class SortedArray:
def __init__(self, capacity = 20):
"""
构造函数
"""
self._capacity = capacity #数组最大容量
self._size = 0 #数组已使用的大小
self._data = [None]*self._capacity #初始化元素
def SortedArrayAdd(self, elem):
"""
对大小固定的有序数组进行增加元素
elem:待添加元素
"""
#首元素添加
if self._size == 0:
self._data[0] = elem
self._size += 1
return
#数组已满就退出
if self._size == self._capacity:
print("数组已满")
return
#倒序遍历数组,移动后面的元素,直到找到插入位置
for i in range(self._size-1, -1, -1):
if elem < self._data[i]:
self._data[i+1] = self._data[i]
else:
break
#找到位置进行插入,更新size
self._data[i+1] = elem
self._size += 1
def Delet(self, index):
"""
删除指定位置index的元素
"""
#1.判断index的合法性
if index<0 or index>self._size-1:
print("index不合法!删除失败")
return
#2.依次挪动元素
for i in range(index+1, self._size, 1):
self._data[i-1] = self._data[i]
#3.更新size
self._size -=1
def print(self):
"""
打印数组
"""
for i in range(self._size):
print(self._data[i],end = '\t')
测试:
array1 = SortedArray(20)
for i in range(10):
array1.SortedArrayAdd(i+1)
array1.print()
#添加元素
print("\n添加元素:")
array1.SortedArrayAdd(1.23)
array1.print()
print()
array1.SortedArrayAdd(4)
array1.print()
#删除元素
print("\n删除元素:")
array1.Delet(6)
array1.print()
2,实现两个有序数组合并为一个有序数组
def merge(nums1, nums2):
m = len(nums1)
n = len(nums2)
count = m + n - 1
i = m - 1
j = n - 1
res = [None] * (count + 1)
while i >= 0 and j >= 0: #逆序进行判断,nums1和nums2中最大的那个肯定在res中也是最大的
if nums1[i] >= nums2[j]:
res[count] = nums1[i]
count -= 1
i -= 1
else:
res[count] = nums2[j]
count -= 1
j -= 1
while i >= 0: #如果最小值在nums1中,需要接着将小的值放到res中
res[count] = nums1[i]
count -= 1
i -= 1
while j >= 0: #如果最小值在nums2中,需要接着将小的值放到res中
res[count] = nums2[j]
count -= 1
j -= 1
return res
nums1 = [2, 2, 3, 9]
nums2 = [1, 5, 6]
print(merge(nums1, nums2))
参考:https://blog.csdn.net/weixin_43633501/article/details/90110507
二,链表
待续