自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

大葱的田地🌱

这里是代码与创意的交汇之地,我是大葱,一名热爱技术的开发者。在这里,我用 0 和 1 重建世界,分享编程的乐趣与技术的深度思考。

  • 博客(160)
  • 资源 (5)
  • 收藏
  • 关注

原创 力扣百大算法题精选【Hard 模式】Top 100 Liked LeetCode

"刷了300道题,面试还是被Hard题秒杀?" —— 这可能是许多LeetCode练习者的真实噩梦。当你自信满满地走进面试间,面试官却抛出一道《俄罗斯套娃信封》或《戳气球》,瞬间让你体会到什么叫"题目都看得懂,代码却无从下手"的绝望。博主在当年面试菊厂之前刷了大量Medium的题目和部分Hard的题目,面试时体感非常良好,可见平时练的难,考试就能考得好!

2025-03-29 06:59:39 1343

原创 ⭐算法OJ⭐经典题目分类索引(持续更新)

在编程竞赛和算法学习中,Online Judge(OJ)平台是程序员们磨练技能的重要工具。OJ平台上的题目种类繁多,涵盖了从基础数据结构到复杂算法的各个方面。为了更好地理解和掌握这些题目,对其进行分类是非常有必要的。这篇索引文章会持续更新,欢迎大家点赞收藏!

2025-03-11 08:00:23 1578

原创 ⭐算法OJ⭐数据流的中位数【最小堆】Find Median from Data Stream

最小堆是一种特殊的完全二叉树数据结构,它满足以下性质:堆性质:每个节点的值都小于或等于其子节点的值(根节点是最小值);完全二叉树性质:除了最底层外,其他层的节点都是满的,且最底层的节点都靠左排列。

2025-04-08 23:49:20 238

原创 ⭐算法OJ⭐滑动窗口最大值【双端队列(deque)】Sliding Window Maximum

双端队列(deque,全称double-ended queue)是C++标准模板库(STL)中的一个容器适配器,它允许在队列的两端高效地进行插入和删除操作。滑动窗口最大值是一个经典的算法问题,我们需要找到数组中每个大小为k的滑动窗口中的最大值。我们可以使用双端队列(deque)来高效解决这个问题。主要思路是维护一个双端队列,队列中存储的是数组元素的索引,且队列中的元素按照从大到小的顺序排列。这样可以保证队列前端始终是当前窗口的最大值。

2025-04-07 23:37:42 230

原创 哈密尔顿路径(Hamiltonian Path)及相关算法题目

哈密尔顿路径(Hamiltonian Path)是指在一个图中经过每个顶点恰好一次的路径。哈密尔顿路径(Hamiltonian Path)问题是一个经典的 NP-Complete 问题,意味着目前没有已知的多项式时间解法(除非 P=NP)。但在实际应用中,我们可以采用以下几种方法进行求解:回溯法(Backtracking):尝试所有可能的路径,遇到无效路径时回溯;动态规划(DP + 状态压缩):用二进制位掩码表示已访问的顶点集合,DP存储状态。

2025-04-04 23:39:38 668

原创 ⭐算法OJ⭐寻找最短超串【动态规划 + 状态压缩】(C++ 实现)Find the Shortest Superstring

这个问题要求找到一个最短的字符串,使得给定的所有字符串都是它的子串。我们可以将其转化为旅行商问题(TSP)的变种:将每个字符串视为一个城市,字符串间的重叠部分视为路径权重。通过动态规划,我们记录使用不同字符串组合(状态压缩)时的最优解,逐步构建包含更多字符串的超级字符串,最终回溯得到最短结果。该解法利用状态压缩DP高效处理这个NP难问题,时间复杂度为O(n²·2ⁿ),适用于较小规模的输入(n≤20)。

2025-04-04 23:28:09 812

原创 ⭐算法OJ⭐重建行程【哈密尔顿路径】(C++ 实现)Reconstruct Itinerary

重建行程问题要求从"JFK"出发,按字典序最小顺序使用所有机票。核心解法是采用Hierholzer算法寻找欧拉路径:建图:用优先队列(最小堆)构建邻接表,确保每次取字典序最小的目的地;DFS遍历:从JFK出发深度优先搜索,递归访问邻接节点;后序处理:当节点无出边时加入结果,最后反转结果列表。关键点:优先队列保证字典序、后序处理确保路径完整、反转得到正确顺序。算法时间复杂度O(ElogE),空间复杂度O(E),能高效找到最优解。

2025-04-04 10:46:19 798

原创 深入解析拓扑排序:算法与实现细节

拓扑排序(Topological Sort) 是图论中一种重要的线性排序算法,它在任务调度、依赖关系解析等领域有着广泛的应用。本文将深入探讨拓扑排序的核心概念、多种实现方式、复杂度分析,帮助读者全面理解这一算法的精髓。

2025-04-02 00:04:21 901

原创 Rust 语言语法糖深度解析:优雅背后的编译器魔法

语法糖(Syntactic Sugar)是编程语言中那些并不引入新功能,但能使代码更易读写的语法特性。在Rust中,语法糖不仅提升了开发者的生产力,还经常与语言的核心特性如所有权、生命周期等深度结合。对于有一定经验的开发者而言,理解这些语法糖背后的实现机制,能够帮助我们写出更地道、更高效的Rust代码。

2025-03-31 23:51:46 977

原创 从零开始学Rust:枚举(enum)与模式匹配核心机制

Rust的枚举(enum)是带数据的代数类型,配合模式匹配(match)形成强大的类型安全机制。每个枚举变体可携带不同类型数据,match确保所有情况被处理。这种组合完美处理状态和错误,如Option/Result消除空指针风险,if let简化单分支匹配。编译器会检查穷尽性和类型一致性,在保证安全的同时提供灵活的数据建模能力,是Rust核心特性之一。

2025-03-31 12:35:35 765

原创 程序语言中的语法糖:让代码更优雅的甜味剂

读书的时候,有一段时间,我也曾非常崇拜那些“一行代码过OJ”的大佬,后来逐渐意识到代码的可读性的重要性。尤其是和其他成员合作,写出晦涩难懂的代码只会被称作shit mountain,毕竟工业级别的代码是为了使用,不是为了设计谜语。话说回来,虽是过犹不及,但是对于作为初学者,绝大部分代码值得改进的地方都在于冗余复杂。而精简表达、降低代码长度的重要技巧就是使用“语法糖”。

2025-03-31 07:34:46 1045

原创 从零开始学Rust:结构体(struct)详解

Rust中的结构体(struct)是自定义复合数据类型,用于组织相关联的数据。基本结构体包含命名字段,实例默认不可变(需mut声明才能修改),支持字段初始化简写和通过..语法基于现有实例创建新实例。除常规结构体外,还有元组结构体(具名元组)和单元结构体(无字段)。通过#[derive(Debug)]可实现调试打印,impl块可为结构体定义方法和关联函数。方法调用时Rust自动处理引用/解引用,无需特殊运算符。结构体相比元组能提供更清晰的语义表达,是Rust中组织数据的基础方式。

2025-03-31 04:18:51 447

原创 从零开始学Rust:所有权(Ownership)机制精要

所有权系统在编译期实现:自动内存回收(RAII模式);无数据竞争;无悬垂指针;零运行时开销。这套机制使Rust无需垃圾回收器即可保证内存安全,同时保持与C/C++相当的性能。

2025-03-31 01:11:58 927

原创 ⭐算法OJ⭐ 戳气球【动态规划】Burst Balloons

戳气球问题要求通过最优顺序戳破气球以获得最大硬币数量,关键在于逆向思维——最后戳破的气球会将问题分解为独立的子问题。采用动态规划中的区间DP方法,定义 dp[i][j] 为戳破开区间 (i,j) 内气球的最大收益,并通过首尾添加虚拟气球简化边界处理。通过三重循环递推计算不同区间的最大值,最终在 O(n³) 时间内解决问题,典型地体现了动态规划对重叠子问题和最优子结构的高效处理。

2025-03-31 00:27:40 279

原创 ⭐算法OJ⭐俄罗斯套娃信封问题【排序 + LIS】Russian Doll Envelopes

本题通过排序 + LIS的经典组合,将二维问题转化为一维问题。按宽度升序、高度降序排序,避免同一宽度的信封被重复选择。使用贪心 + 二分优化 LIS,将时间复杂度从 O(N^2 ) 降为 O(NlogN)。

2025-03-30 11:52:21 699

原创 杠杆ETF的数学原理:为什么TQQQ不是简单的3倍回报?

杠杆型ETF(如TQQQ)承诺提供标的资产(如QQQ)的每日杠杆收益(如3倍),但长期回报往往偏离预期。本文从数学角度分析杠杆ETF的复利效应、波动损耗(Volatility Decay),并推导其长期表现的数学模型,帮助投资者理解其真实风险。

2025-03-30 11:16:48 959

原创 Linux 基础文件操作指南:做硬盘的寻宝高手

你是否会在开会时共享屏幕,当众写代码,想要找到同事提起的一个文件却不知从何下手?你盯着满屏杂乱无章的文件,仿佛面对一座没有地图的迷宫: 下载/临时/最终版/真的最终版/这次绝对不改了?那个占据50GB空间的"神秘嘉宾"究竟是谁?上周紧急修改的关键配置,现在躲在哪个月亮背面?别担心!掌握这几个简单的Linux命令,你就能像福尔摩斯一样:Linux命令行就是你的放大镜和指南针。

2025-03-29 05:35:19 207

原创 ⭐算法OJ⭐并查集的应用/DFS/BFS:省份数量问题 Number of Provinces

并查集(Union-Find)是一种树型的数据结构,用于处理一些不交集合(Disjoint Sets)的合并及查询问题。在省份数量问题中:每个城市最初属于自己独立的省份(即自己是自己的父节点);当两个城市相连时,我们合并它们所在的省份;最终,剩余的独立集合数量就是省份的总数。

2025-03-29 05:13:25 848

原创 并查集(Union-Find)数据结构详解

并查集(Union-Find) 是一种用于管理 不相交集合(Disjoint Sets) 的数据结构,主要支持以下两种操作:Find(u):查找元素 u 所属的集合(通常返回其根节点);Union(u, v):合并两个元素 u 和 v 所在的集合。并查集广泛应用于:图的连通性问题(如Kruskal算法求最小生成树);动态连通性问题(如社交网络中的好友关系);游戏开发(如像素连通性检测)。

2025-03-28 00:17:31 859

原创 ⭐算法OJ⭐连接所有点的最小费用【最小生成树】(C++实现)Min Cost to Connect All Points

给定一组二维平面上的点,其中 points[i] = [xi, yi]。连接两点 [xi, yi] 和 [xj, yj] 的费用是它们之间的曼哈顿距离:|xi - xj| + |yi - yj|。返回连接所有点所需的最小总费用。所有点都应该被连接,并且任意两点之间有且只有一条路径。这是一个典型的最小生成树(MST)问题,可以使用 Kruskal算法 或 Prim算法 解决。

2025-03-25 23:47:08 805

原创 ⭐算法OJ⭐二叉树的直径【树】(C++实现)Binary Tree Paths

给定一棵二叉树的根节点 root,返回这棵树的直径长度。二叉树的直径是指树中任意两个节点间最长路径的长度。这个路径可能穿过也可能不穿过根节点。两个节点之间的路径长度由它们之间的边数表示。我们可以使用深度优先搜索(DFS)来递归地计算每个节点的左右子树的最大深度,并在过程中更新最大直径。直径的长度可以看作是左子树的深度加上右子树的深度(即穿过当前节点的最长路径)。

2025-03-25 11:45:44 742

原创 ⭐算法OJ⭐二叉树的坡度【树的遍历】(C++实现)Binary Tree Tilt

二叉树的坡度(Tilt)问题本身是一个经典的算法练习题,主要用于帮助理解二叉树的递归遍历和节点值的计算。

2025-03-24 11:27:32 398

原创 ⭐算法OJ⭐二叉树摄像头【树的遍历+动态规划】(C++实现)Binary Tree Cameras

给定一棵二叉树的根节点,需要在树的节点上安装摄像头。每个摄像头可以监控其父节点、自身以及其直接子节点。要求返回监控整棵树所需的最小摄像头数量。这个问题可以通过贪心算法和动态规划来解决。我们需要遍历树,并为每个节点决定是否安装摄像头。为了最小化摄像头的数量,采用自底向上的策略,从叶子节点开始向上处理。

2025-03-23 09:00:00 945

原创 表达式树和编译原理【10道经典面试题】(中英对照)

这10道题目涵盖了表达式树的核心概念、遍历方法、构建过程以及在编译中的应用。通过这些问题,可以全面考察候选人对表达式树和编译过程的理解。

2025-03-22 06:12:42 932

原创 表达式树(Expression Tree)在编译器中的应用

表达式树(Expression Tree)是一种用于表示数学表达式的二叉树结构。它在编译器设计、数学计算引擎、符号计算等领域有着广泛的应用。理解表达式树的构建、遍历和求值不仅有助于解决实际问题,还能提升对算法和数据结构的深入理解。本文将详细介绍表达式树的核心概念、构建方法、遍历方式以及实际应用。

2025-03-22 05:56:43 922

原创 ⭐算法OJ⭐判断二叉搜索树【树的遍历】(C++实现)Validate Binary Search Tree

二叉搜索树(BST)有一个非常重要的性质:中序遍历的结果是一个严格递增的序列。如果对一棵二叉搜索树进行中序遍历(Inorder Traversal),得到的节点值的序列一定是从小到大严格递增的。要判断一棵二叉树是否是有效的二叉搜索树(BST),可以利用 BST 的这个性质。

2025-03-22 02:02:59 590

原创 二叉树的三种遍历【树的遍历】(C++实现)Binary Tree Traversal

前序遍历:根节点最先访问,适合复制树或生成前缀表达式;中序遍历:根节点在中间访问,适合获取有序数据(如二叉搜索树);后序遍历:根节点最后访问,适合删除树或生成后缀表达式。

2025-03-21 12:29:23 1282

原创 ⭐算法OJ⭐二叉树的后序遍历【树的遍历】(C++实现)Binary Tree Postorder Traversal

要实现对二叉树的后序遍历(Postorder Traversal),我们可以使用递归或迭代的方法。后序遍历的顺序是:左子树 -> 右子树 -> 根节点。

2025-03-20 23:46:41 1084

原创 ⭐算法OJ⭐二叉树的前序遍历【树的遍历】(C++实现)Binary Tree Preorder Traversal

要实现二叉树的前序遍历(Preorder Traversal),我们可以使用递归或迭代的方法。前序遍历的顺序是:根节点 -> 左子树 -> 右子树。

2025-03-20 11:07:05 485

原创 ⭐算法OJ⭐二叉树的中序遍历【树的遍历】(C++实现)Binary Tree Inorder Traversal

树是一种非常简洁的图结构,具有许多有趣的性质和应用。本文介绍二叉树的中序遍历。中序遍历的顺序是:左子树 -> 根节点 -> 右子树。两种实现分别是递归解法,和迭代解法,即使用栈模拟递归过程。

2025-03-19 23:49:14 812

原创 图论入门【数据结构基础】:什么是树?如何表示树?

图论是计算机科学和数学中的一个重要分支,研究图的结构及其性质。本文将介绍树的基本概念、性质及其在计算机科学中的应用。在图论中,树是一种无向图,具有以下两个主要特性:1. 连通性:树中的任意两个顶点之间都存在一条路径。2. 无环性:树中不存在任何环。

2025-03-18 23:56:22 1138

原创 ⭐算法OJ⭐是否是二分图【BFS】(C++实现)Is Graph Bipartite?

要判断一个无向图是否是二分图(Bipartite),我们可以使用图的着色方法。具体思路是:尝试用两种颜色(例如 0 和 1)对图中的节点进行着色,确保相邻节点颜色不同。如果能够成功完成着色,则图是二分图;否则,不是二分图。

2025-03-17 23:54:38 861

原创 ⭐算法OJ⭐克隆图【BFS】(C++实现)Clone Graph

要克隆一个无向连通图,我们可以使用深度优先搜索(DFS)或广度优先搜索(BFS)来遍历图,并在遍历过程中创建每个节点的副本。为了确保每个节点只被复制一次,我们可以使用一个哈希表(或字典)来存储已经复制过的节点。此文给出使用C++实现的BFS方法。

2025-03-17 23:41:49 956

原创 ⭐算法OJ⭐两数之和【哈希表】(C++ 实现)Two Sum

“两数之和”(Two Sum)是一道非常经典的算法题目,几乎是算法入门和面试准备的必做题之一。这道题目是许多初学者接触哈希表(Hash Table)或字典(Dictionary)的第一个应用场景。它帮助初学者理解如何通过空间换时间,将时间复杂度从暴力解法的 O(n²) 优化到 O(n)。

2025-03-16 12:10:35 962

原创 图论入门【数据结构基础】:什么是图?如何表示图?

图(Graph)是一种非线性数据结构,用于表示对象之间的关系。图由顶点(Vertex)和 边(Edge)组成,其中顶点表示对象,边表示对象之间的关系。图广泛应用于计算机科学、数学、物理、生物、社交网络等领域。

2025-03-14 22:44:42 1302

原创 ⭐算法OJ⭐汉明距离【位操作】(C++ 实现)Total Hamming Distance

Hamming Distance(汉明距离)是用于衡量两个等长字符串在相同位置上不同字符的个数的度量。它通常用于比较两个二进制字符串或编码序列的差异。

2025-03-14 11:07:59 858

原创 ⭐算法OJ⭐汉明距离【位操作】(C++ 实现)Hamming Distance

Hamming Distance(汉明距离)是用于衡量两个等长字符串在相同位置上不同字符的个数的度量。它通常用于比较两个二进制字符串或编码序列的差异。

2025-03-13 23:43:03 979

原创 为什么程序员需要学习数字电路

在编程的世界里,我们通常关注的是算法、数据结构、框架和设计模式等软件层面的知识。然而,数字电路作为计算机硬件的核心基础,对程序员来说同样重要。它不仅帮助我们理解计算机的底层原理,还能在实际开发中优化性能、解决硬件相关问题。无论是嵌入式开发、硬件加速,还是跨学科合作,数字电路知识都能为我们提供强大的支持。如果你是一名程序员,不妨花点时间学习数字电路,它将为你打开一扇通往硬件世界的大门,让你的技术能力更上一层楼!

2025-03-13 10:35:43 545

原创 CAP 公理解析:分布式系统中的一致性、可用性与分区容错性

CAP 公理是分布式系统设计中的一个核心理论,由计算机科学家 Eric Brewer 在 2000 年提出。它指出,在分布式系统中,一致性(Consistency)、可用性(Availability) 和 分区容错性(Partition Tolerance)三者不可兼得,最多只能同时满足其中两个。

2025-03-13 08:00:00 1048

原创 ⭐算法OJ⭐因数游戏【动态规划】Divisor Game

Alice 和 Bob 在玩一个游戏,Alice 先手。初始时,黑板上有一个数字 n。每轮玩家需要执行以下操作:选择一个满足 0 < x < n 且 n % x == 0 的数字 x。将黑板上的数字 n 替换为 n - x。如果玩家无法执行操作(即没有满足条件的 x),则该玩家输掉游戏。假设 Alice 和 Bob 都采取最优策略,判断 Alice 是否能赢得游戏。如果 Alice 能赢,返回 true;否则返回 false。

2025-03-13 00:39:36 768

Introduction to Modern Cryptography 2nd

Introduction to Modern Cryptography 第二版 英文原版 代书签 高清PDF

2017-10-25

DH-Algorithmics-the Spirit of Computing 算法精髓 英文第三版 带书签电子书

DH-Algorithmics-the Spirit of Computing, 3rd Ed. by David Harel 英文原版电子书 带书签

2017-10-10

Head First设计模式

Head First设计模式 带书签电子书 中文清晰版 PDF 软件工程必读书

2017-10-10

Head First Design Patterns

Head First Design Patterns 英文清晰版电子书 带书签

2017-10-09

iOS Apprentice Fifth Edition Beginning iOS development with Swift 3 v5.0

iOS Apprentice Fifth Edition Beginning iOS development with Swift 3 v5.0 英文清晰版 带书签 后三册

2017-10-09

空空如也

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

TA关注的人

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