算法
学好程序与算法,走遍天下都不怕
来深圳
在校大学生
展开
-
完全二叉树的节点个数
2021年8月5日leetcode 222题给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。入门看到这题, 很容易想到用深搜或广搜求解 ,然而, 同样时间复杂度的递归分治解法更加简单递归实现, 时间和空间复杂度都是O(n)func countNodes(root *TreeNo原创 2021-08-06 10:49:30 · 993 阅读 · 0 评论 -
leetcode 二叉树的序列化和反序列化(297)
class Codec { // Encodes a tree to a single string. public String serialize(TreeNode root) { List<Object> list = new LinkedList<>(); Queue<TreeNode> queue = new LinkedList<>(); queue.add(root);原创 2021-07-16 14:50:32 · 148 阅读 · 0 评论 -
P1908 逆序对
【代码】P1908 逆序对。原创 2024-03-11 21:14:38 · 356 阅读 · 0 评论 -
洛谷 P1143 进制转换
思路:将n进制数转为十进制数,再转为m进制数。P1143 进制转换。原创 2024-03-11 20:50:46 · 300 阅读 · 0 评论 -
leetcode 螺旋矩阵
54. 螺旋矩阵用visited数组记录是否访问过,directions数组表示"移动方向",模拟过程就可以了func spiralOrder(matrix [][]int) (ans []int) { m, n := len(matrix), len(matrix[0]) row, column := 0, 0 directionIndex := 0 total := m * n directions := [][]int{{0, 1}, {1, 0}, {0, -1}, {-1, 0}}原创 2022-04-11 11:21:57 · 219 阅读 · 0 评论 -
筛法(Sieve of Eratosthenes)
Sieve of Eratosthenes 筛法在数学中,Eratosthenes 筛法是一种古老的算法,用于查找任何给定限制内的所有素数。package mainimport "fmt"/* 素数 非素数:也成为合数 求0~100内有多少个素数*/func main() { fmt.Println(Sieve(100)) fmt.Println(Bf(100))}func Bf(n int) (count int) { for i := 2; i <= n; i+.原创 2022-01-06 19:26:13 · 488 阅读 · 0 评论 -
用两个栈实现队列
剑指 Offer 09. 用两个栈实现队列栈的特点:先进后出队列的特点:先进先出为了达到设计要,我们维护两个栈,第一个栈用来插入元素,而第二个栈用来删除元素list.List链栈import "container/list"// CQueue 维护两个栈,第一个栈支持插入操作,第二个栈支持删除操作。type CQueue struct { stack1, stack2 *list.List}func Constructor() CQueue { return CQueue{st.原创 2021-12-16 20:22:43 · 531 阅读 · 0 评论 -
洗牌算法 Knuth/Fisher–Yates shuffle
洗牌算法In iteration i, pick integer r between 0 and i uniformly at randomSwap a[i] and a[r]Go语言描述func main() { nums := []int{1, 2, 3, 4, 5, 6, 8, 9} knuthShuffle(nums)}func knuthShuffle(nums []int) { rand.Seed(time.Now().UnixNano()) for i := 0; i原创 2021-09-15 19:45:06 · 142 阅读 · 0 评论 -
数字范围按位与
题干:给你两个整数 left 和 right ,表示区间 [left, right] ,返回此区间内所有数字 按位与 的结果(包含 left 、right 端点)。示例:按位与(bitwish AND)的特点对所有数字执行按位与运算的结果是所有对应二进制字符串的公共前缀再用零补上后面的剩余位。问题转换为:给定两个整数,我们要找到它们对应的二进制字符串的公共前缀func rangeBitwiseAnd(m int, n int) int { shift := 0 for m原创 2021-10-10 20:41:37 · 190 阅读 · 0 评论 -
Trie前缀树 leetcode-208
前缀树前缀树是一种用于高效信息检索的数据结构。它是一种特殊的树,从根开始到特定节点的路径可以定义存储在此树中的单词。根据用例的不同,可以为整个ASCII大小、字母表和数字构建trie。应用前缀匹配词频统计数据结构设计isEnd用于表示该节点是否为某个单词的结尾type Trie struct { children [26]*Trie isEnd bool}func Constructor() Trie { return Trie{}}func (t *Trie)原创 2021-11-14 22:08:37 · 73 阅读 · 0 评论