Large Model-learning(1)

大模型实在是太火了,所以也尝试学习一下,会将自己的学习路径发在这里,仅供参考吧。

Day 1-激活基础

很多东西以前都学过,比如最重要的python语言啥的,基础必须得过一下,如果像我一样很久都没接触过的了,建议随便找个公开课速成一下,不然算法题都没法下手😳。我看的是这个up主,很快就可以复习完了:20分钟学完一遍python基础 - 哔哩哔哩

为了防止拖延症,我每天会将最重要的算法题放在第一个。刷了一些攻略,发现很多人都推荐在刷算法题之前,先去过一遍这个up主的基础算法精讲系列,时间也不是很长,所以我也看了一下:两数之和 三数之和【基础算法精讲 01】_哔哩哔哩_bilibili

1.hot100-进度5/100

1.两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。

你可以按任意顺序返回答案。

第一种解法:双指针

在排序时带上索引下标,即排序的对象是元组(num, index)的数组。

时间复杂度:O(nlogn):排序占用

空间复杂度:O(n)

python 复制代码
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        num_index_list = [(num,i) for i,num in enumerate(nums)]
        num_index_list.sort()
        left = 0
        right = len(nums) - 1
        while left < right:
            sum = num_index_list[left][0] + num_index_list[right][0]
            if sum > target:
                right -= 1
            if sum < target:
                left +=1
            if sum == target:
                return [num_index_list[left][1],num_index_list[right][1]]
           

第二种解法:MAP

使用index() 查找。

  1. Map中,keynumvalue是数组index
  2. 遍历数组,如果target - numMap中,返回。反之,将num加入Map中。

时间复杂度:O(n):只遍历一遍

空间复杂度:O(n):字典存了 n 个元素

python 复制代码
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        num_index_list = {}
        
        for i,num in enumerate(nums):
            if target - num in num_index_list :
                return [num_index_list[target - num],i]
            num_index_list[num] = i #把当前数字和它的下标存进字典,给后面的数字用来配对

49. 字母异位词分组

这道题是经典的哈希表分组问题,核心是找到「字母异位词的统一特征」,用这个特征作为哈希表的键,把相同特征的词分到同一组。

第一种解法:排序法

把字符串的字符按字典序排序,异位词排序后结果完全一致。

时间复杂度:O (n*k logk),n 是字符串数量,k 是字符串最大长度

空间复杂度:O(nk)

python 复制代码
class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        anagram_dict = defaultdict(list)
        for s in strs:
            key = ''.join(sorted(s))
            anagram_dict[key].append(s)

        return list(anagram_dict.values())

        

第二种解法:计数法

统计每个字符出现的次数,用「次数数组 / 元组」作为标识。例:eat(1,0,0,...1,0,...1,...)(a:1, e:1, t:1,其余 0)

时间复杂度:O (n*k),n 是字符串数量,k 是字符串最大长度

空间复杂度:O(n*k)

当字符串很长时,排序的时间开销会变大,用字符计数可以优化:

python 复制代码
class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        dic = defaultdict(list)
        for s in strs:
            count = [0] * 26
            for c in s:
                count[ord(c)-ord('a')] += 1
            key = tuple(count)
            dic[key].append(s)
        return list(dic.values())

128.最长连续序列

核心思路:

  • 用 集合(Set)存储数组元素,实现 O (1) 时间的存在性判断
  • 只从序列的起点 开始遍历:如果一个数 x 的前一个数 x-1 不在集合中,说明 x 是某个连续序列的起点
  • 从起点 x 开始,依次检查 x+1, x+2, ... 是否在集合中,统计当前序列长度
  • 最终取所有序列长度的最大值

时间复杂度:O(n)

空间复杂度:O(n):额外开了一个哈希集合 num_set

python 复制代码
class Solution:
    def longestConsecutive(self, nums: List[int]) -> int:
        num_set = set(nums)
        max_len = 0

        for num in num_set:
            if num -1 not in num_set:
                current_num = num
                current_len = 1
                while current_num + 1 in num_set:
                    current_num += 1
                    current_len += 1
                max_len = max(max_len,current_len)
        return max_len

283. 移动零

使用双指针:

  1. 使用一个指针 left 指向当前应该放置非零元素的位置
  2. 遍历数组,遇到非零元素就将其放到 left 位置,然后 left++
  3. 遍历结束后,将 left 之后的所有位置置为 0

时间复杂度:O(n),其中 n 是数组的长度

空间复杂度:O(1),只需要常数的额外空间

python 复制代码
class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        left = 0
        for right in range(len(nums)):
            if nums[right] != 0:
                nums[left], nums[right] = nums[right], nums[left]
                left += 1
        return nums

11. 盛最多水的容器

这道题灵神讲过,思路不难,所以很快就做出来了。

双指针(对撞指针)解法,时间复杂度 O(n) ,空间复杂度 O(1)

python 复制代码
class Solution:
    def maxArea(self, height: List[int]) -> int:
        max_water = 0
        left = 0
        right = len(height)-1
        while left < right:
            if height[left] <= height[right]:
                water = height[left] * (right - left)
                max_water = max(max_water,water)
                left += 1
            else:
                water = height[right] * (right - left)
                max_water = max(max_water,water)
                right -=1
        return max_water

2.准备工作

Python环境,还有VS Code,Git,WSL2 ,PyCharm 这些以前也都用过,所以配置环境部分都直接跳过了。

但是没想到Docker Desktop卡了我那么久!以前在C盘下载过,但是卸载不干净导致没法安装,感谢这篇帖子的博主分享才解决问题:解决Docker Desktop安装报错Component Docker.Installer.EnableFeaturesAction failed: 在 Docker.Installer.In-CSDN博客

3.git同步学习内容

git命令集面试也常考,我一般都是AI指导的,所以这个得单独学一下,比如:

  • git init
  • git status
  • git add .
  • git commit -m "xxx"
  • git remote -v
  • git remote add origin 仓库地址
  • git pull
  • git push

详细命令行可以参考这两篇帖子查漏补缺:Git 常用命令大全Git 常用基本命令使用详细大全_git命令行-CSDN博客

这里建议根据自己需求整理一份git面试笔记,多搜集资料。

最后顺便练习一下git指令,将今日份学习笔记上传至github。

相关推荐
PieroPc2 小时前
用tkinter 做一个通过 扫描仪硬件 扫描纸质文档的软件 支持pdf
python·pdf·扫描
Be for thing2 小时前
分支管理与冲突解决
git·学习
威联通网络存储2 小时前
某头部 EMS 电子制造企业:基于威联通NAS的 SMT 产线追溯与数据治理实践
python·制造
Sgf2272 小时前
第15章 网络编程
开发语言·网络·php
-To be number.wan2 小时前
PyCharm接入DeepSeek全教程|3种方法+避坑指南
python·学习·pycharm
Ares-Wang2 小时前
Python》》FastAPI 异步框架 接口 pymysql【同步】 aiomysql【异步】
开发语言·python·fastapi
لا معنى له2 小时前
综述翻译:Embodied Science: Closing the Discovery Loop withAgentic Embodied AI
人工智能·笔记·学习
SPC的存折2 小时前
3、Ansible之playbook模块大全
linux·运维·网络·python
chushiyunen3 小时前
检索模型bi-encoder笔记
笔记