一些其他的抢救

发现自己在笔试的时候,面对一些前缀和、模拟的题,宛如成为了废物呜呜呜!

前缀和:

前缀用于求某个区间的元素,差分分用于修改某个区间元素

presum[i]就是 = nums[i] + presum[i - 1]

但是目前没有看出来有什么用,暂时就,先做题感受吧!!最终的目的是把美团那道流星get到555

一维的presum:

303. 区域和检索 - 数组不可变

看了一下题目果然就是传统意义上的前缀和哈哈哈!然后突然发现一旦离开教程性质的东西,我的能力和效率果然都下降了,所以还是需要培养这种检索的能力呀!!!

然后发现没有代码随想录那种妈喂饭式的帮助,重新习惯并看懂别人讲的代码还是需要时间适应和消化的,但是还是不能放弃坚强和勇敢呀~

差分:

想对nums[i: j + 1]全部都加上3

可以先做nums的差分,然后diff[i] += 3, diff[j + 1] -= 3

华为的准备,夜深人静的时候开始难过了,不知道这样什么时候是个头了呜呜呜,该不会找不到工作吧,不知道到底要准备到什么程度才可以,生活真的好难啊

3. 无重复字符的最长子串

这道题一看就看不懂,然后发现说其实跟之前第一次面试的题目真的很像,思路什么的,所以基本做codetop应该是真的hin有效果的呜呜呜

其他公司机会不多,所以暂时只有练到华为的机会呜呜呜!

好的这道题我再想想,先做下一道吧

739. 每日温度 

好像e

关于美团的一些codetop,感觉美团的题好像确实就是比华为好想很多的样子

88. 合并两个有序数组

这道题之前面试遇到过,然后方法比较朴素,然后果然就写错了,目前市面上可能会遇到三种情况:

一个比较简单的方式是拷贝,然后这部分我其实做错了很多,错误写法:

class Solution:
    def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
        import copy
        num_list = copy.deepcopy(nums1)
        cur_1, cur_2 = 0, 0
        for i in range(len(nums1)):
            if num_list[cur_1] <= nums2[cur_2]:
                nums1[i] = num_list[cur_1]
                cur_1 += 1
            else:
                nums1[i] = nums2[cur_2]
                cur_2 += 1

直接显示在for里面越界了,因为cur_1, cur_2有可能会加到很复杂的情况,然后包括这里的深拷贝也造成了一定程度上的浪费,所以还是正常使用复制会比较节约空间:

class Solution:
    def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
        num_list = nums1[:m]
        cur_1, cur_2, i = 0, 0, 0
        while cur_1 < m and cur_2 < n:
            if num_list[cur_1] <= nums2[cur_2]:
                nums1[i] = num_list[cur_1]
                cur_1 += 1
            else:
                nums1[i] = nums2[cur_2]
                cur_2 += 1
            i += 1
        # 到了这步还没完,后面还有一点没有遍历到的
        if cur_1 == m:
            nums1[i:] = nums2[cur_2:]
        else:
            nums1[i:] = num_list[cur_1:]

还有一个是内部排序(这个明天看了快排再说吧)

还有一个是三指针

class Solution:
    def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
        cur_1, cur_2 = m - 1, n - 1
        i = len(nums1) - 1
        # while cur_1 > 0 and cur_2 > 0:
        while cur_1 >= 0 and cur_2 >= 0:
            if nums1[cur_1] >= nums2[cur_2]:
                nums1[i] = nums1[cur_1]
                cur_1 -= 1
            else:
                nums1[cur_1] < nums2[cur_2]
                nums1[i] = nums2[cur_2]
                cur_2 -= 1
            # 忘记了i了
            i -= 1
        # if cur_1 == 0:
        if cur_1 == -1:
            # nums1[:cur_2] = nums2[:cur_2]
            nums1[:cur_2 + 1] = nums2[:cur_2 + 1] # 因为这样才能到当前位
        # else: # 无意义
        #     nums1[:cur_1] = nums1[:cur_1]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值