Rust学习笔记(1)

Rust学习笔记(1)

本文介绍了Rust中判断变量所有权是否转移的“灵魂三问”法则,以及自动解引用的适用场景。 **所有权判断**:对于复杂类型(如String),若发生“裸体赋值”(`=` 直接赋值)、作为参数传递给函数(未加`&`)、或调用消耗自身的方法(如`into_...()`),则所有权转移,原变量失效。简单类型(如i32)则始终存活。此外,变量在离开其作用域`{}`时也会被销毁。 **自动解引用**:主要发生在两个场景:1)使用点操作符`.`调用方法或访问字段时,编译器会自动尝试解引用或加引用直到找到对应成员;2)函数传参时,若类型实现了`Deref`,`&T`会自动转换为`&U`(如`&String`转`&str`)。但在赋值、算术运算和模式匹配中,不会自动解引用,需手动处理。 简言之,所有权转移遵循明确规则,而自动解引用旨在方便方法调用和传参,但在可能影响逻辑正确性的操作中保持严格。

学习 
百度AIGC一面面经

百度AIGC一面面经

面试官迟到后,吐槽简历过于简略,建议将投稿中的高端论文内容补充进去以便其他部门捞人。随后考察了深度学习概念(如Attention、GRU、LSTM),其中LSTM部分回答不佳。现场手撕算法题“找出频率最高的k个单词,同频按字母排序”并通过。整体面试氛围较愉快,但结果未知。

学习 
完全背包类型

完全背包类型

本文总结了完全背包问题的几种常见变体及其动态规划解法: - **求组合数**(如零钱兑换II):外层循环遍历物品,内层循环遍历背包容量。 - **求排列数**(如组合总和Ⅳ、爬楼梯进阶版):外层循环遍历背包容量,内层循环遍历物品。 - **求最小物品数**(如零钱兑换、完全平方数):使用 `dp[j] = min(dp[j - coins[i]] + 1, dp[j])` 递推。 关键代码中,组合/排列数通过 `dp[i] += dp[i - nums[j]]` 累计方案数,最小数问题则取最小值更新。

学习 
0-1背包类型

0-1背包类型

本文以背包问题为例,总结了五种常见变体及其核心求解目标: 1. 纯0-1背包:在给定容量下求能装的最大价值。 2. 分割等和子集:判断背包是否能恰好装满。 3. 最后一块石头的重量II:在容量限制下求最多能装多少。 4. 目标和:计算恰好装满背包的方法数。 5. 一和零:在二维容量约束下求最多能放入的物品数量。 这些变体体现了背包问题从最值、可行性到计数和多维约束的扩展思路。

学习