学习日记day76

Day76_0204

专注时间:目标是:5h30~6h。实际:5h32min。1.调整学习路线;2.调整算法学习方法;3.重视工程能力。

每日任务: 饭后的休息(25min),学习间歇的休息(15min)都用手表计时器来监督

{step1} 40min =二刷 1 道力扣hot100 +昨天的题再做一遍 (如果是hard,只做一道就好 完成情况及时长: 二刷昨日题目:min,今日题目: min );【学习资源:PyTorch官方文档:https://docs.pytorch.ac.cn/tutorials/beginner/basics/intro.html】1.5h=PyTorch工程实操(完成情况及时长: 0。把第二个pytorch网页的"局部禁用梯度计算"看懂,就去看第一个pytorch网页 ); {step4} 1h=周志华机器学习(完成情况及时长: 0min ); {setp3} 1.5h+(claude的《RL4LLM》+《Claude Opus 4.5深度思考RLHF学习路径》学习路径,时长: min ) {step2,计网考纲复习+模式识别复习} 3h =计算机网络考纲题目背诵] (完成情况及时长:);

学完机器学习,然后是深度学习。学完PyTorch,之后是Transformer与大模型架构(见Gemini3pro生成的阶段2)。学快一点。准备一个GitHub Repo把所有手撕过的算法整理进去,这会是最好的复习资料。

必须熟记的API、最简洁的GPT实现、带注释的Transformer实现、推荐系统模型库(包含主流模型实现)还有"Let's build GPT"系列学习视频见Claude的第20页。 冰哥听讲座,老师说: GPT是最好的老师,不需要其他家教,清华学生智商120,GPT有140。多用大模型来帮助学习。

学习内容:力扣(50+45+32)、华为题目看了一两道(12)、ML(logit代码)、调研搜集就业方向和学习路径

总结与心得:偷懒了几天,今天也有做的不好的地方:每顿饭后/健身回来后都是拖很久才学习,而且只学了3个专注周期,而且看游戏比赛直播和刷抖音占了很多时间,明天改改,依旧是逼自己学15分钟,进入状态之后就可以了。然后要达到每天的专注时长目标,今天刷到华为AI岗的线上题目,不管是算法题还是八股,都有难度和门槛,DL岗位也考察ML,所以这学期ML没白学,但是没能并行地学习DL,比较遗憾。道阻且长,如果一天一天的荒废,3年下来也就那样了。觉得困就去房间睡,不困就学到15.00再睡,不要找状态不好的借口躺着。之前在宿舍都没法专心学习,后来可以了,在家学习应该也是能最终做到的。整理学习路线时候发现AI给的路线不靠谱不实际也不成体系,然后就不知道该走什么方向,学什么方向,找了很久,终于找到合适靠谱的博主分享的学习路线,长舒了一口气。明天重新整理。

《41.缺失的第一个正数》

python 复制代码
class Solution(object):
    def firstMissingPositive(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        #可以推断出答案在1到len(nums)+1之间。
        #用原地数组哈希,我们只关心数组中1到len(nums)有没有出现,映射:num(key)->nums-1(idx)
        #若映射完后,顺序遍历nums,nums[i]!=i+1,则为答案。若1到len(nums)都出现了,答案就是n+1
        n = len(nums)
        #这样写有个问题,顺序遍历时候会把后面待处理的元素交换到前面来,而顺序遍历是不回头的,待处理元素就一直得不到处理,从而出错。既然是放置,可以用while和指针,指针前面的位置表示已经放置好,while 指针==len(nums)就可以退出循环了。也不对,如果我已经知道了哪里没放置好,答案也早就有了。
        #核心改进:对每个索引 i,用 while 循环持续处理,直到当前 i 位置的元素要么不在 1~n 范围内,要么已经放到了正确的位置上,再移动到下一个索引 i,这样就不会遗漏交换后新出现的待处理元素。
        for i in range(n):
            #该数在范围内,需要被映射放置;该数不在范围内,不需要处理
            #如果有重复的数,并且该数在范围内,就会死循环
            while 0<=nums[i]-1<=n-1 and nums[i]!=nums[nums[i]-1]:
                nums[nums[i]-1],nums[i] = nums[i],nums[nums[i]-1]
        #时间复杂度应该是多少呢?每个元素至多被交换一次,且遍历一次。所以是o(n)

        for i in range(n):
            if nums[i]!=i+1:
                return i+1
        #不要漏解
        return n+1

        

《33.搜索旋转排序数组》

python 复制代码
class Solution(object):
    def search(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        #有点像快速排序的变体快速选择?根据区间的两个端点值与target的大小比较,来确定所需要进一步搜索的区间
        #如果左端点比右端点大,说明当前区间不是一个单增的区间,而是有两个单增的区间。然后比较端点和target的大小来选区间。这样还是o(n),因为找答案所在区间是o(n)
        def erfen(nums,l,r,target):
            while l<r:
                mid = (l+r)//2
                if nums[mid]>=target:
                    r = mid
                else:
                    l = mid+1
            return l
        l,r = 0,len(nums)-1
        while nums[l]>nums[r] and target<=nums[r]:
            l+=1
        while nums[l]>nums[r] and target>=nums[l]:
            r-=1
        res=erfen(nums,l,r,target)
        return res if nums[res] == target else -1
        
python 复制代码
class Solution(object):
    def search(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        #既然是二分的变式,那么先考虑正常二分过程,分析该过程能从哪些地方改进
        #在二分时候mid将区间一分为二,[l,mid] [mid+1,r]那么一定有一边的区间是有序的,或者两边的区间都有序。
        #根据有序的那个部分确定我们该如何改变二分查找的上下界[l,mid-1] [mid] [mid+1,r] if nums[mid]==target,return mid
        if len(nums) == 1:
            return 0 if nums[0]==target else -1
        l,r = 0,len(nums)-1
        #因为有if nums[mid]==target的判断所以要l<=r
        while l<=r:
            mid = (l+r)//2
            if nums[mid] == target:
                return mid
            #左边区间有序,不能漏取等号,太多细节了
            if nums[l]<=nums[mid]:
                #答案在左半边,所以动r
                if nums[l]<=target<nums[mid]:
                    r = mid-1
                #答案不在这个区间,动l来抛弃这个区间
                else:
                    l = mid+1
            #右边区间有序
            else:
                if nums[mid]<target<=nums[r]:
                    l = mid+1
                else:
                    r = mid-1
        return -1

《34.在排序数组中查找元素的第一个和最后一个位置》

python 复制代码
class Solution(object):
    def searchRange(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        if not nums:
            return [-1,-1]
        #或者这样记忆?mid\mid+1,找的是mid,在mid+1的左边,所以是左边界
        #mid/mid-1。mid在右边,所以是右边界
        def Lidx(nums,target):
            l,r = 0,len(nums)-1
            while l < r:
                mid = (l+r)/2
                #遇到大于等于target的都要去找左边的区间,所以是找左边界。
                if nums[mid]>=target:
                    r = mid
                else:
                    l = mid+1
            return l if nums[l]==target else -1
        def Ridx(nums,target):
            l,r = 0,len(nums)-1
            while l<r:
                mid = (l+r+1)/2
                #遇到小于等于target的都要把去找右边的区间,所以是找右边界。
                if nums[mid]<=target:
                    l = mid
                else:
                    r = mid-1
            return l if nums[l]==target else -1
        return [Lidx(nums,target),Ridx(nums,target)]
相关推荐
西岸行者8 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意8 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码8 天前
嵌入式学习路线
学习
毛小茛8 天前
计算机系统概论——校验码
学习
babe小鑫8 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms8 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下8 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。8 天前
2026.2.25监控学习
学习
im_AMBER8 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J8 天前
从“Hello World“ 开始 C++
c语言·c++·学习