自定义博客皮肤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 重建世界,分享编程的乐趣与技术的深度思考。

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

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

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

2025-03-29 06:59:39 1531

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

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

2025-03-11 08:00:23 1654

原创 函数式编程核心精要

函数式编程的核心在于不可变数据和纯函数,通过高阶函数、递归等机制实现计算逻辑。其关键技术包括柯里化、惰性求值和模式匹配,具有并发安全、易于测试等优势。实践建议从不可变数据入手,逐步应用函数式思维。本质区别在于:面向对象封装可变状态,而函数式消除可变状态以获得可证明性。

2025-07-27 06:32:33 290

原创 深入解析:跨文件夹移动文件的速度瓶颈与优化策略

文件移动速度受存储设备类型、文件系统和文件特征影响。HDD因机械寻道延迟,在跨文件夹移动小文件时较慢;SSD无物理限制,速度更快。同一磁盘内移动仅修改元数据,速度极快;跨磁盘移动需完整复制数据,速度较慢。海量小文件移动会因元数据开销降低性能,建议压缩或使用robocopy/rsync工具优化。升级SSD、减少跨磁盘操作和合并小文件可显著提升文件移动效率。

2025-07-21 08:18:50 711

原创 ⭐算法OJ⭐并查集的应用/DFS/BFS:岛屿数量问题 Number of Islands

给定一个由 '1'(陆地)和 '0'(水)组成的二维网格,计算岛屿的数量。岛屿被水包围,并且通过水平或垂直方向上相邻的陆地连接形成。

2025-04-19 04:54:23 450

原创 深入理解栈数据结构:从基础概念到高级应用

栈(Stack)是计算机科学中最基础且最重要的数据结构之一,其简洁而强大的特性使其在算法设计、系统编程和软件开发中无处不在。本文将全面解析栈数据结构的核心概念、实现方式、典型应用场景以及高级变体,帮助读者深入理解这一基础数据结构的原理与实践。

2025-04-15 23:52:50 967

原创 内存分配中的堆(Memory Heap)详解

在计算机科学中,"堆"这个术语确实容易让人混淆,因为它同时用于描述两种完全不同的概念:数据结构中的堆和内存管理中的堆。内存分配中的堆(Heap)是操作系统为程序提供的一块动态内存区域,与栈(Stack)内存相对应。它是程序运行时可以动态申请和释放的内存空间。

2025-04-09 23:38:48 1009

原创 什么是堆?深入理解堆数据结构及其应用

什么是堆?它和内存分配中的堆是一回事吗?

2025-04-09 23:30:36 992

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

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

2025-04-08 23:49:20 603

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

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

2025-04-07 23:37:42 485

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

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

2025-04-04 23:39:38 991

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

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

2025-04-04 23:28:09 957

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

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

2025-04-04 10:46:19 867

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

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

2025-04-02 00:04:21 1060

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

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

2025-03-31 23:51:46 1101

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

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

2025-03-31 12:35:35 863

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

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

2025-03-31 07:34:46 1184

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

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

2025-03-31 04:18:51 567

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

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

2025-03-31 01:11:58 1016

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

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

2025-03-31 00:27:40 366

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

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

2025-03-30 11:52:21 794

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

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

2025-03-30 11:16:48 1472

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

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

2025-03-29 05:35:19 262

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

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

2025-03-29 05:13:25 923

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

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

2025-03-28 00:17:31 1316

原创 ⭐算法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 875

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

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

2025-03-25 11:45:44 788

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

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

2025-03-24 11:27:32 428

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

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

2025-03-23 09:00:00 999

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

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

2025-03-22 06:12:42 998

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

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

2025-03-22 05:56:43 1084

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

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

2025-03-22 02:02:59 651

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

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

2025-03-21 12:29:23 1460

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

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

2025-03-20 23:46:41 1133

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

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

2025-03-20 11:07:05 557

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

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

2025-03-19 23:49:14 880

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

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

2025-03-18 23:56:22 1414

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

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

2025-03-17 23:54:38 909

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

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

2025-03-17 23:41:49 998

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

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

2025-03-16 12:10:35 1051

Introduction to Modern Cryptography 2nd

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

2017-10-25

Head First Design Patterns

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

2017-10-09

Head First设计模式

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

2017-10-10

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

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

2017-10-10

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关注的人

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