一、复习
(一)1. 两数之和
1、这题主要是在考查哈希表,利用哈希表做映射,牺牲空间,换取时间的速度,最终只需要遍历一次。
2、字典是映射结构。
(二)26. 删除有序数组中的重复项
1、这题主要考虑如何节省空间,利用双指针,一边搜索,一边修改。
2、此处python中的指针就是数组的index
二、27. 移除元素
1、和昨天双指针的那个删除有序数组相似——一个指针用于搜索,一个用于记录。
2、不过这里p我设置的含义是下一个该写到哪里(index),但是还没有写,所以实际上只写到了index为p-1的地方。所以长度为p。
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
n = len(nums)
# p为下一个该写在哪
# q为下一个搜索哪里
p = 0
for q in range(n):
if nums[q]!=val:
nums[p] = nums[q]
p+=1
return p
三、35. 搜索插入位置
1、像是二分法哈哈,试一下~
2、自己第一次写的代码只考虑了target在中间且不在数组的情况,在两边和n=1的边界情况都没有考虑。
代码如下:
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
n = len(nums)
left = 0
right = n-1
if n==1:
if target>nums[0]:
return 1
else:
return 0
if target>nums[-1]:
return n
if target<nums[0]:
return 0
for i in range(n):
mid = (left + right)//2
if nums[mid] == target:
return mid
if right-left == 1:
return right
if target>nums[mid]:
left = mid
if target < nums[mid]:
right = mid
3、看一下别人的答案(居然没有用python写的,是我浅薄了)。