主要内容
从txt文件导入电影信息(一次性)
基于命令行的电影管理小程序(CRUD)
登录验证
CRUD
txt文件示例:
DVD.txt
12345678910111213145.1987 华尔街 Wall Street.mkv1998 细细的红线 The Thin Red Line.mkv1999 星球大战1魅影危机 Star Wars Episode I The Phantom Menace.mkv2000 猎杀U-571 U-571.mkv2002 星球大战2克隆人的进攻 Star Wars Episode II Attack Of The Clones.mkv2005 豺狼帝国 Empire of the Wolves.mkv2005 翻译风波 The Interpreter.mkv2005 星球大战3西斯的反击 Star Wars Episode III Revenge Of The Sith.mkv2005 查理和巧克力工厂 Charlie and the Chocolate Factory.mkv(儿童)2007 灵魂战车 Ghost Rider Extended ...
数据结构与算法
未读226. 翻转二叉树给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
示例 1:
12输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]
示例 2:
12输入:root = [2,1,3]输出:[2,3,1]
示例 3:
12输入:root = []输出:[]
提示:
树中节点数目范围在 [0, 100] 内
-100 <= Node.val <= 100
💡 思路:本质上还是二叉树的遍历:
递归实现,每个节点递归处理左右子节点
迭代法深度优先(栈)实现
迭代法广度优先(层序遍历,队列)实现
代码(思路一):
1234567891011121314151617181920use std::rc::Rc;use std::cell::RefCell;impl Solution { pub fn invert_tree(root: Option<Rc<RefCell<TreeNode>>>) -> Option<Rc& ...
数据结构与算法
未读144. 二叉树的前序遍历给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
示例 1:
输入:root = [1,null,2,3]
输出:[1,2,3]
解释:
示例 2:
输入:root = [1,2,3,4,5,null,8,null,null,6,7,9]
输出:[1,2,4,5,6,7,3,8,9]
解释:
示例 3:
输入:root = []
输出:[]
示例 4:
输入:root = [1]
输出:[1]
提示:
树中节点数目在范围 [0, 100] 内
-100 <= Node.val <= 100
进阶:递归算法很简单,你可以通过迭代算法完成吗?
💡 思路:
递归法
迭代法
二叉树定义:
123456789101112131415161718// Definition for a binary tree node.#[derive(Debug, PartialEq, Eq)]pub struct TreeNode { pub val: i32, pub left: ...
数据结构与算法
未读232. 用栈实现队列请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):
实现 MyQueue 类:
void push(int x) 将元素 x 推到队列的末尾
int pop() 从队列的开头移除并返回元素
int peek() 返回队列开头的元素
boolean empty() 如果队列为空,返回 true ;否则,返回 false
说明:
你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。
你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。
示例 1:
1234567891011121314输入:["MyQueue", "push", "push", "peek", "pop", "empty"][[], [1], [2 ...
数据结构与算法
未读344. 反转字符串编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
示例 1:
12输入:s = ["h","e","l","l","o"]输出:["o","l","l","e","h"]
示例 2:
12输入:s = ["H","a","n","n","a","h"]输出:["h","a","n","n","a","H"]
提示:
1 <= s.length <= 10^5
s[i] 都是 ASC ...
数据结构与算法
未读242. 有效的字母异位词给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的 字母异位词。
示例 1:
12输入: s = "anagram", t = "nagaram"输出: true
示例 2:
12输入: s = "rat", t = "car"输出:false
提示:
1 <= s.length, t.length <= 5 * 104
s 和 t 仅包含小写字母
进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
💡 思路:
哈希表法
数组记录法(输入字符串不能为unicode)
代码(思路一):
123456789101112131415161718192021222324use std::collections::HashMap;impl Solution { pub fn is_anagram(s: String, t: String) -> bool { ...
数据结构与算法
未读203. 移除链表元素给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val == val的节点,并返回新的头节点。
示例 1:
12输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]
示例 2:
12输入:head = [], val = 1输出:[]
示例 3:
12输入:head = [7,7,7,7], val = 7输出:[]
提示:
列表中的节点数目在范围 [0, 104] 内
1 <= Node.val <= 50
0 <= val <= 50
💡 思路:思路一:无虚拟头节点
循环检查头节点是否需要删除,直到头节点的值不等于 **val**。
从头节点开始遍历,删除后续所有值为 val 的节点。思路二:使用虚拟头节点
代码(思路一):
123456789101112131415161718192021222324252627282930impl Solution { pub fn remove_elements(head: ...
数据结构与算法
未读59. 螺旋矩阵 II给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
示例 1:
12输入:n = 3输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
12输入:n = 1输出:[[1]]
提示:
1 <= n <= 20
💡 思路:模拟,将填入的过程用代码模拟出来
代码(思路一):
1234567891011121314151617181920212223242526272829303132333435impl Solution { pub fn generate_matrix(n: i32) -> Vec<Vec<i32>> { let mut ans = vec![vec![0; n as usize]; n as usize]; // 存储结果 let mut x = 0; let mut y = 0; let mut fx = 0; ...
数据结构与算法
未读209. 长度最小的子数组给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
示例 1:
123输入:target = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组[4,3] 是该条件下的长度最小的子数组。
示例 2:
12输入:target = 4, nums = [1,4,4]输出:1
示例 3:
12输入:target = 11, nums = [1,1,1,1,1,1,1,1]输出:0
提示:
1 <= target <= 109
1 <= nums.length <= 105
1 <= nums[i] <= 104
进阶:
如果你已经实现 O(n) 时间复杂度的解法, 请尝试设计一个 O(n log(n)) 时间复杂度的解法。
💡 思路:
暴力破解 两个循环,不断的寻找符合条件的 ...
数据结构与算法
未读27. 移除元素给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。
假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:
更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
返回 k。
用户评测:
评测机将使用以下代码测试您的解决方案:
123456789101112int[] nums = [...]; // 输入数组int val = ...; // 要移除的值int[] expectedNums = [...]; // 长度正确的预期答案。 // 它以不等于 val 的值排序。int k = removeElement(nums, val); // 调用你的实现assert k == expectedNums.length;sort(nums, 0, k); // 排序 nums 的前 k 个元素f ...














