自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(84)
  • 收藏
  • 关注

原创 rust学习笔记21-闭包

Rust 闭包通过以下机制实现强大功能:        灵活捕获环境:支持不可变/可变借用和所有权转移。        零成本抽象:编译时生成高效代码。        类型安全:通过 Fn、FnMut、FnOnce trait 保证行为正确性。

2025-03-30 11:58:58 422

原创 rust学习笔记20-Trait

Trait 在 Rust 中是非常强大的工具,用于定义共享行为、实现多态性以及提供灵活的接口设计。通过 Trait,你可以编写高度模块化和可复用的代码,同时保持静态类型系统的安全性和性能优势。无论是简单的接口定义还是复杂的泛型编程,Trait 都能提供所需的功能和支持。

2025-03-23 19:43:18 754

原创 rust学习笔记19-泛型

泛型是编写灵活且可重用代码的强大工具。它们使得你可以编写适用于多种类型的代码,而不需要重复自己。Rust 的泛型系统不仅强大而且非常高效,因为所有泛型代码都在编译时被具体化,确保运行时性能不会受到影响。通过合理地使用泛型,你可以创建出更加通用、类型安全的程序。

2025-03-22 22:43:05 445

原创 rust学习笔记18-迭代器

Rust 迭代器通过链式调用和惰性求值,提供了高效的声明式编程方式。掌握常用适配器和消耗器,能够编写简洁且高性能的代码。大力推荐使用。

2025-03-20 22:18:12 359

原创 rust学习笔记17-异常处理

总结,rust没有try/catch这样的异常处理机制,而是通过Result 和 Option这样枚举处理,unwrap 和 expect在开发调试过程中用比较多,自定义错误,校验类函数用的多。

2025-03-18 22:01:55 542

原创 rust学习笔记16-206.反转链表(递归)

用递归首先需要确定终止条件,在翻转链表中,终止条件就是cur为空,然后返回pre, 如果不为空先保存node.next(cur.next)到临时变量temp中,然后node.next=pre,最后递归直到为空返回。

2025-03-17 21:29:01 292

原创 rust学习笔记15-栈和队列

用栈模拟队列需用两个栈,一个负责进in,一个负责出out,重点在与出pop,先要判断out是否为空,为空就要把in栈全部出栈,推送给out,再由out送出。用队列模拟栈简单,只需要在pop时候,先获取队列最后一个值,返回并删除即可。

2025-03-16 20:24:53 561

原创 rust学习笔记14-函数

函数参数分所有权移动、不可变引用、可变引用需要重点理解掌握

2025-03-15 18:07:48 631

原创 rust学习笔记13-18. 四数之和

两数之和与三数之和、四数之和解法不一样,主要是因为返回值,两数之和要返回下角标不能做排序,用hashmap合适,而三数之和、四数之和是要求返回结果集且不能重复,需要对数组进行排序,用双指针更适合。

2025-03-10 21:00:26 535

原创 rust学习笔记12-hashmap与1. 两数之和

rust集合中也有hashmap,昨天已经提到过,学过java同学再熟悉不过了,一道经典面试题问hashmap在java1.8的实现原理,数组+哈希表+红黑树,rust中hashmap在功能上和java一样,但实现上有很大差别,它的基本用法如下。同时,Rust 的类型系统在编译时就进行了严格的类型检查,避免了运行时的类型错误。总结rust使用HashMap判断key是否存在用的是引用类型&n,获取数值是*k,这点需要注意,如果不愿意使用*k,可以在Some(&k)也使用引用类型,这样就可以不用加*了。

2025-03-05 22:01:37 847

原创 rust学习笔记11-集合349. 两个数组的交集

rust除了结构体,还有集合类型,同样也很重要,常见的有数组(Array)、向量(Vector)、哈希表(HashMap) 和 集合(HashSet)字符串等,好意外呀,go没有HashMap、HashSet。HashSet 学过java的同学很熟悉,它一种不可重复切无序的集合,和HashMap相似 HashMap下一篇再讲, 本次我们用它来解决 两个数组的交集。总结,rust也有丰富的集合类型,本次只学习Vector和HashSet,后面再学其他的,集合很重要,需要重点掌握。

2025-03-04 21:20:41 441

原创 rust学习笔记10-智能指针与142.环形链表II

再上一篇我们已经接触过一个智能指针Box<T>,并且完成了翻转链表,但是Box 是一个独占所有权的智能指针,意味着不能创建环形链表,因为环形链表势必有2个节点同时指向一个区域,因此就要采用可以共享所有权的Rc<T>智能指针。本题主要关键点,一个是智能指针Rc<RefCell<T>> 组合使用,在一个处理返回值,这次用了Result枚举类型,还要一个就力扣不能提交本地测试(这个建议用AI生成测试用例,不必自己去写)

2025-03-02 20:49:45 529

原创 rust学习笔记9-结构体与206.反转链表

结构体是rust重要是数据结构,需要重点掌握,未来无论刷题还是做项目都会大量用到。再处理链表这类复杂的数据结构,特别是为空判断,可以使用Option枚举类型,来处理这种情况。

2025-03-02 11:52:39 800 1

原创 rust学习笔记8-枚举与模式匹配

switch 语法很经典,但在 Rust 中并不支持,很多语言摒弃 switch 的原因都是因为 switch 容易存在因忘记添加 break 而产生的串接运行问题,Java 和 C# 这类语言通过安全检查杜绝这种情况出现。总结一下,Rust的枚举类型非常灵活,能够表示多种不同的情况,每个变体可以携带不同类型和数量的数据。许多语言支持 null 的存在(C/C++、Java),这样很方便,但也制造了极大的问题,null 的发明者也承认这一点,"一个方便的想法造成累计 10 亿美元的损失"。

2025-03-01 14:09:22 489

原创 rust学习笔记7-344. 反转字符串

1.Rust 不支持i++ 和i--,因为这两个运算符出现在变量的前后会影响代码可读性,减弱了开发者对变量改变的意识能力,但对于会其他语言如Java、Python的同学来讲,初期有点不适应。

2025-02-28 21:15:30 571

原创 rust学习笔记6-数组练习704. 二分查找

总结这道题是一道基础题,之前其他语言也做过,不难, 需要注意的一点nums.len()的返回值是usize类型需要先转换i32,然后在nums[middle as usize]在转换了,有人可能疑惑这不是多此一举,所有类型都是声明usize不就行了吗,答案是不行,因为提交leetcode会报数组越界问题。输入: nums = [-1,0,3,5,9,12], target = 9。输入: nums = [-1,0,3,5,9,12], target = 2。解释: 2 不存在 nums 中因此返回 -1。

2025-02-25 18:06:59 412

原创 rust学习笔记5-所有权机制

当声明一个变量时候,它就绑定了一个数据、scope以及一片内存区域,它就拥有一个所有权,并且它的所有权是可以出借(引用)的,变量不管是拥有还是引用,它都可以设置为可变和不可变,默认为不可变,拥有所有权的变量离开当前scope进入新scope时候,会调用Move(Copy)。rust所有权共享有两种一种是clone,另一种是copy,区别在于,clone是要求编写代码自己去调用,copy是在编译的时候,编译自己完成,不需要自己去调用。

2025-02-23 22:29:09 354

原创 rust学习笔记4-基础类型2和内存管理模型

与数组相比相同点:都是复合类型、长度都是固定的,不同点在于元组可以是不同类型的数据类型,数组必须同一类型的数据类型。数组不用过多介绍,但元组不是所有语言都有,目前我学的语言只有python,rust有这个类型。或传参会转移值的所有权,原变量将失效(编译器确保安全)。rust和其他语言一样除了基本的整型、浮点型、布尔、字符外也有复合类型、集合类型等复杂类型。2.以Java/Python/Go等于语言,采用gc管理:垃圾回收,虽然内存安全,值在任意时刻只能被一个变量拥有,所有者负责值的生命周期。

2025-02-23 19:04:48 243

原创 rust学习笔记3-基础语法

运行结果。

2025-02-19 21:43:49 370

原创 rust学习笔记2-rust的包管理工具Cargo使用

cargo-edit 是一个 Rust 语言的 Cargo 子命令扩展,它允许用户通过命令行轻松地管理 Cargo.toml 文件中的依赖项。这个工具提供了几个子命令,包括 cargo add、cargo rm、cargo upgrade 和 cargo set-version,使得添加、删除和更新依赖项变得更加简单和高效。cargo new --lib project_name 创建一个新的 Rust 库项目的。cargo build --release为生成优化的可执行文件,常用于生产环境。

2025-02-17 22:25:48 545

原创 rust学习笔记1-window安装开发环境

在 刚刚指定的cargo 安装目录(CARGO_HOME目录)新建 config 文件(没有更改安装路径的话就是在 C:\Users\Administrator\.cargo 这个目录)安装完成后回到命令行界面,选择安装类型,直接回车,表示默认安装。提高rust安装组件下载速度,也可以不配置,需要等待时间长一些,有概率因为网速等原因下载失败。3.双击运行 rustup-init.exe,如果电脑没有。(1)在指定路径新建.cargo和.rustup文件夹。(2)配置rustup下载源镜像。

2025-02-16 18:38:31 584

原创 Linux磁盘挂载,AI提示词一定要加“永久”二字

重启后,由于没有任务异常提示,便开始常规操作,直到拷贝大文件提示“No space left on device“,然后经过一系列的排查,发现之前挂载的磁盘不见了,然后上网查询发现磁盘挂载是临时的不是永久的,重启后需要重新挂载,好坑爹。最近公司服务器空间不足了,公司采购一批新的大容量硬盘4TB,要挂载到现有服务器上,这种事情不经常有,因此就去问AI大模型,我输入的提示词是 "挂载新硬盘" 注意没有加'永久',因为不清楚有临时/永久区分。这样,在系统重启后,磁盘会自动挂载到指定目录。

2025-02-14 10:38:09 425

原创 linux 释放9090端口

执行 systemctl stop cockpit.socket 关闭该服务。然后执行 systemctl list-sockets。发现是系统cockpit.service占用的该端口。因部署web服务,发现9090端口被系统占用。执行 sudo lsof -i :9090。

2025-02-13 11:45:44 299

原创 算法训练营day52,204. 计数质数

爱拉陶斯芬筛法,简称埃氏筛或爱氏筛。要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的倍数剔除,剩下的就是素数。先用2去筛,即把2留下,把2的倍数剔除掉;再用下一个质数,也就是3筛,把3留下,把3的倍数剔除掉;接下去用下一个质数5筛,把5留下,把5的倍数剔除掉;不断重复下去......。小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7。

2024-05-10 22:04:25 460 1

原创 算法训练营day51(补), 单调栈3

/头部添加一个元素0。//尾部添加一个元素0。

2024-03-17 11:11:04 373

原创 算法训练营day50(补),单调栈2

/因为收尾相连,采用i%2运算实现循环。

2024-03-17 09:47:10 568

原创 算法训练营day49(补), 单调栈1

/如果nums2[top]值是map的key找到了要的结果。//计算当前下标与栈顶值之差就是要的结果。//nums1值和下标做映射。//小于等于直接入栈。

2024-03-13 21:24:19 389

原创 算法训练营day48,动态规划16

/相差大于1看dp[i + 1][j - 1]是否为true,为true也是回文。// 如果j和i相同,字符串等a是回文,如果j和i之差等于1 ,字符串等aa也是回文。//不相等取左右两边最大值。//左右两边相等加2。

2024-03-11 22:27:46 499

原创 算法训练营day47,动态规划15

/当word1、word2字符串元素不相等,即可以删除word1的元素,也可以删除word2的元素,还可以两个数组元素都删除,因为求最少,所以取三者最小值。//当word1、word2字符串元素不相等,即可以删除或者添加word1的元素,还有替换元素,求最小值。//同样当word1为空需要删word2的全部元素长度为j。//同样当word1为空需要删word2的全部元素长度为j。//当word2为空需要删word1的全部元素长度为i。//当word2为空需要删word1的全部元素长度为i。

2024-03-10 19:41:32 328

原创 算法训练营day46,动态规划14

/本题与求最长公共子序列相似,区别在于,如果s是t的子序列,那么最长公共子序列的长度等于s的长度,否则s不是t的子序列。//如果s为空字符串,则至少有1种,因此初始化为1。

2024-03-10 13:47:56 515

原创 算法训练营day45(补),动态规划13

*本题与求最长重复子序列相似,不同之处在于不要求是连续的了,但要有相对顺序, 即:"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。因此text1[i-1]和 text2[j-1] 相同一样,直接+1,不相同则在dp[i][j-1]与dp[i-1][j]之间取最大值*/// 求最大子数组和就是让nums数组当前值和dp数组上一个值相加,在与nums数组当前比较,取最大值。//最大值初始值为数组第一个数,不能给0。//本质上还是求最长公共子序列。

2024-03-09 22:00:24 448

原创 算法训练营day44(补),动态规划12

/因为要求连续,遍历1次即可。//收集所有重复子序列。

2024-03-09 18:18:34 323

原创 算法训练营day43(补),动态规划11

/第K次买入后的利润。//第K次不持有的利润。//不持有的利润含有手续费。//买卖股票的最佳2的升级版。//买卖股票的最佳2的升级版。

2024-03-07 22:13:55 371

原创 算法训练营day42(补),动态规划10

/第一次买入后的利润。//第一次不持有的利润。//第二次买入后的利润。//第二次不持有的利润。

2024-03-06 22:05:41 516

原创 算法训练营day41(补),动态规划9

/环形可以拆成去掉头和去掉尾两个数组分别求最大值,然后取二者最大值。//相邻不能偷,从2开始。

2024-03-05 21:09:11 295

原创 算法训练营day40(补),动态规划8

for j := 0;j++ { // 遍历物品。for i := 1;i++ { // 遍历背包。w := s[j:i] //截取字符串。

2024-03-05 15:50:17 352

原创 算法训练营day39(补),动态规划7

当 m = 2,n = 3 时,n = 3 这表示一共有三个台阶,m = 2 代表你每次可以爬一个台阶或者两个台阶。j++ { // 遍历背包。每次你可以爬至多m (1 <= m < n)个台阶。for i := 0;for i := 1;j++ { // 遍历背包。for j := 1;j++ { // 遍历背包。for i := 1;for i := 1;for i := 1;1 阶 + 1 阶 + 1 阶段。

2024-03-04 18:00:55 362

原创 算法训练营day38(补),动态规划6

/求装满背包有几种方法,递推公式一般都是dp[i] += dp[i - nums[j]];问背包能背的物品最大价值是多少?

2024-02-29 23:02:13 567

原创 算法训练营day37(补),动态规划5

/如果是奇数肯定无法得到目标值,直接返回0。//先统计每个字符串0的数量。

2024-02-28 22:47:24 670

原创 算法训练营day35, 二叉搜索树的范围和

/中序遍历左中右处理即可。

2024-02-26 22:33:17 371

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除