一力扣88
- 如果我们从正面比较然后更迭的话,就会产生nums1中有的数被更跌后就会被占用,因此消失
- 为了解决这个问题,我们从后往前跌打,使用双指针记录比较的末尾值,然后进行迭代,从而在索引上更迭正确的值
- 这个方式有一个疑问,就是有可能一方更迭玩,一般是nums2,所以我们在末尾还要补充连上另一个的列表的代码
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.
"""
a=m-1
b=n-1
index=m+n-1
while a>=0 and b>=0:
if nums1[a]>nums2[b]:
nums1[index]=nums1[a]
a-=1
index-=1
else:
nums1[index]=nums2[b]
b-=1
index-=1
if b<0:
while b>=0:
nums1[index]=nums2[b]
b-=1
index-=1
return nums1
二 力扣题目89
- 好吧我自首,我看不懂,只能学题解思路,真累,题目都不明白,什么是格雷编码我没搞懂
- 学题解的位运算也没明白太懂,位运算的与运算可以实现格雷编码的反转,然后每次将上一次反转的和原本的继续反转,大概就是这么个迭代,尽力了,题解看不太会。
class Solution:
def grayCode(self, n: int) -> List[int]:
res = [0]
for i in range(1, (1 << n)):
res.append(res[-1] ^ (i & -i))
return res
三力扣题目104
- 这就那个递归的深搜嘛思路如下
- 每次递归给两个节点,每次递归都让深度加一,返回的时候返回左右两节点的最大值
- 递归停止的时候就节点无了,直接返回0,说明搜不下去了
class Solution:
def grayCode(self, n: int) -> List[int]:
res = [0]
for i in range(1, (1 << n)):
res.append(res[-1] ^ (i & -i))
return res
今日总结:
各类编码我不会。。其他的还好,学的明白,写的通透