算法导学-3-哈希表类型题目
掌握情况
题目
通关
有效的字母异位词
通过
两个数组的交集
通过(Set API 需要熟悉)
快乐数
通过(链表是否有环)
两数之和
通过
四数相加Ⅱ
未通过
赎金信
通过
三数之和
四数之和
有效的字母异位词LeetCode 242.有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
12输入: s = "anagram", t = "nagaram"输出: true
排序法
t 是 s 的异位词等价于「两个字符串排序后相等」。
因此我们可以对字符串s 和t 分别排序,看排序后的字符串是否相等即可判断。
此外,如果s 和t 的长度不同,t 必然不是s 的异位词。
123456789101112131415// 排序法public boolean isAnagram(String s, String t) { // 长度不相等,之u姐舍弃 ...
数据结构-4-二叉树
二叉树的遍历先序遍历递归版本123456789101112131415public void preorder(Node head) { // 递归终止条件 if (head == null) { return; } // 访问树节点 Visit(head); // 遍历左子树 preorder(head.left); // 遍历右子树 preorder(head.right);}
非递归版本123456789101112131415161718192021222324public void preOrder(Node head) { if (head != null) { // 定义辅助栈 Stack<Node> stack = new Stack<>(); // 根节点入栈 stack.add(head); // 先访问根节点,再访问 ...
FSharp-09-DataStructure
Record
example1
12// Labels are separated by semicolons when defined on the same line.type Point = { X: float; Y: float; Z: float; }
12let mypoint = { X = 1.0; Y = 1.0; Z = -1.0; }mypoint
example2
123456// You can define labels on their own line with or without a semicolon.type Customer = { First: string Last: string; SSN: uint32 AccountNumber: uint32; }
example3
1234type Point = { X: float; Y: float; Z: float; }type Point3D = { ...
FSharp-08-Array.Parallel
单线程计算
12[|0..100|] |>Array.map (fun x -> x*x) // 1/n
index
value
0
0
1
1
2
4
3
9
4
16
5
25
6
36
7
49
8
64
9
81
10
100
11
121
12
144
13
169
14
196
15
225
16
256
17
289
18
324
19
361
(81 more)
并行计算
12[|0..100|]|>Array.Parallel.map (fun x -> x*x) // 100%
index
value
0
0
1
1
2
4
3
9
4
16
5
25
6
36
7
49
8
64
9
81
10
100
11
121
12
144
13
169
14
196
15
225
16
256
17
289
18
324
19
361
...
算法导学-2-链表类型题目
掌握情况
题目
通关
移除链表元素
通过
设计链表
通过(细节问题)
反转链表
通过
两两交换链表中的节点
删除链表倒数第 N 个节点
未通过(快慢指针理解问题)
链表相交
通过
环形链表Ⅱ
未通过(快慢指针理解问题)
移除链表元素LeetCode 203.移除链表元素
问题
给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val == val的节点,并返回新的头节点。
12输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]
迭代删除
算法思想
用temp表示当前节点。
如果temp的下一个节点不为空且下一个节点的节点值等于给定的val,则需要删除下一个节点。删除下一个节点可以通过以下做法实现: temp.next = temp.next.next
如果temp的下一个节点的节点值不等于给定的val,则保留下一个节点,将temp移动到下一个节点即可。
当temp的下一个节点为空时,链表遍历结束,此时所有节点值等于val的节点都被删除。
由 ...
数据结构-3-链表
引言:
方法论
对于笔试:一切为了时间复杂度,不用在乎空间复杂度
对于面试:时间复杂度放在首位,空间复杂度尽量最小
重要技巧
额外数据结构记录(哈希表等)
快慢指针
链表回文
方式1 利用快慢指针走到中点,将链表后一半放入栈
123456789101112131415161718192021222324252627282930313233343536// 方式1public boolean isPalindrome(Node head) {if (head == null || head.next == null) { return true;}// 定义栈Stack<Node> stack = new Stack<Node>();// 定义右指针Node right = head.next;// 定义当前指针Node cur = head;while (cur.next != null || cur.next.next != null) { // 慢指针步长为1 right = right ...