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。

相关推荐
Absurd5871 小时前
JavaScript中模块化在游戏引擎开发中的资源调度作用
jvm·数据库·python
2301_815279522 小时前
SQL如何利用聚合函数生成业务分析指标_KPI计算基础教程
jvm·数据库·python
qq_330037992 小时前
mysql如何排查Out of memory错误_mysql内存分配调优
jvm·数据库·python
好家伙VCC2 小时前
**发散创新:用Rust实现基于RAFT共识算法的轻量级分布式日志系统**在分布式系统中,**一致性协议**是保障数据可靠
java·分布式·python·rust·共识算法
weixin_458580123 小时前
如何在 Go 中直接将 AST 编译为可执行二进制文件?
jvm·数据库·python
晔子yy3 小时前
【JAVA探索之路】从头开始讲透、实现单例模式
java·开发语言·单例模式
阿正的梦工坊8 小时前
JavaScript 微任务与宏任务完全指南
开发语言·javascript·ecmascript
muddjsv8 小时前
Git 代码同步与协作的核心命令全解析
git
2301_816660218 小时前
PHP怎么处理Eloquent Attribute Inference属性推断_Laravel从数据自动推导类型【操作】
jvm·数据库·python
第一程序员8 小时前
数据工程 pipelines 实践
python·github