一、复习
- 移除元素-双指针问题,一个指针用来记录下一个扫描哪个元素;另一个指针用来记录下一个写哪里
- 搜索插入位置-二分法,不断与中间位置的数字比较大小值,缩小区间范围;当两侧只差一个单位时,看val是否与两侧中的一个相等or在两个之间。
二、66. 加一
1、感觉这道题的主要问题在于进位。
2、不知道为啥错
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
n = len(digits)
for i in range(n-1,-1,-1):
if digits[i]+1>=10:
digits[i] = digits+1-10
digits[i-1]+=1
else:
digits[i]+1
return digits
3、鹅鹅鹅好智障,没赋值。赋值后还是有考虑不周全的情况
4、写的好长,主要思路就是判断是不是最后一个,来决定加不加1;判断是不是第一个,来决定要不要insert。其他的,就是>10,就进位,然后自己-1。
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
n = len(digits)
for i in range(n-1,-1,-1):
if i ==n-1:
if digits[i]+1>=10:
digits[i] = digits[i]+1-10
if i==0:
digits.insert(0,1)
return digits
else:
digits[i-1]+=1
else:
digits[i] = digits[i]+1
return digits
else:
if digits[i]>=10:
digits[i] = digits[i]-10
if i==0:
digits.insert(0,1)
return digits
else:
digits[i-1]+=1
else:
return digits
5、、看下别人怎么写的
好强啊,看倒数几位有几个9。没有9,就直接加1;有几个9,就在再往前一位变为1,后面变为0;全为就,就在最前面—加一个1,后面为0。
三、88. 合并两个有序数组
1、区分break(这个循环)和continue(本轮循环)
2、没有考虑到有负数的情况
class Solution:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
"""
Do not return anything, modify nums1 in-place instead.
"""
for j in range(n):
for i in range(m+n):
if nums1[i]==0:
nums1.insert(i,nums2[j])
break
if nums2[j]<nums1[i]:
nums1.insert(i,nums2[j])
break
del(nums1[m+n:])
3、又试了下,不想说话了
class Solution:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
"""
Do not return anything, modify nums1 in-place instead.
"""
del(nums1[m:])
for j in range(n):
for i in range(m+j):
if nums2[j]<nums1[i]:
nums1.insert(i,nums2[j])
break
if i==m+j-1:
nums1.insert(i+1,nums2[j])
4、一行送走,绝绝子。时间复杂度:平均情况为 O((m+n)\log(m+n))O((m+n)log(m+n))。
nums1[m:] = nums2
nums1.sort()
5、再借用一个空间,用双指针也可以。被之前的省空间的思维禁锢了,这里没有这个条件。nums1[:]=sorted和nums1=sorted[:]不一样
class Solution:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
"""
Do not return anything, modify nums1 in-place instead.
"""
sorted = []
p,q=0,0
while(p!=m or q!=n):
if p==m:
sorted.append(nums2[q])
q +=1
elif q==n:
sorted.append(nums1[p])
p +=1
else:
if nums1[p]>nums2[q]:
sorted.append(nums2[q])
q+=1
else:
sorted.append(nums1[p])
p+=1
nums1[:]=sorted