Archive

「我干了什么 究竟拿了时间换了什么」
2025

java闭包

闭包是JavaScript和Java中重要的概念,指函数或Lambda捕获外部作用域变量。JavaScript通过内部函数访问局部变量形成闭包;Java中,Lambda或匿名类捕获final变量实现闭包,动态绑定状态,增强函数式编程灵活性。


ollama工具-下载安装快速上手

介绍本地大模型运行器Ollama,说明了如何安装、通过命令行下载并运行Gemma等模型进行交互,以及如何列出、删除模型。还演示了直接提问、查看效率和使用llava分析图片功能


ollama工具-自定义模型

这篇博客介绍了如何使用Ollama的Modelfile定制化模型。通过在Modelfile中指定基础模型、调整temperature等参数和设置SYSTEM系统提示,可以使用ollama create命令创建个性化的模型,然后运行交互。


java基础(2) 实现hashCode方法的通用约定

hashCode的通用约定确保哈希表等数据结构能正确运行:首先,如果两个对象通过equals方法比较是相等的,它们的hashCode必须相同;其次,只要用于equals比较的对象信息未变,单次程序运行中同一对象的hashCode必须保持一致;最后,虽然不强制要求,但为了提高性能,不相等的对象应尽量产生不同的hashCode以减少哈希冲突。


026 哈希表,有序表和比较器的用法

哈希表(集):O(1)操作依赖hashCode/equals;有序表(集):O(log n)操作依赖比较器维护顺序。介绍根据值/地址作键、数组替代哈希表场景、比较器定制和字典序概念。


025 堆结构与堆排序

堆是数组实现的完全二叉树,核心操作为向上(heapInsert)和向下(heapify)调整(O(log n))。堆排序先建堆(O(n)或O(n log n)),再交换堆顶并调整。整体时间复杂度O(n log n),空间O(1)。堆结构本身比堆排序更有用。


力扣2607 使子数组元素和相等

优化


024 随机选择算法,BFPRT算法

本博客讲解了在无序数组中寻找第K大元素的两种方法:随机选择算法和BFPRT算法。随机选择算法基于快排思想,期望时间复杂度为O(n),但证明较复杂。BFPRT算法通过选取“中位数的中位数”作为pivot,保证最坏情况下时间复杂度也为O(n),但实现稍复杂。博客提供了两种算法的Java代码,并强调BFPRT算法的意义在于其规避最坏情况,优化算法的思想。


018 二叉树遍历的非递归方法和复杂度分析

本文总结了用栈实现二叉树的三种遍历方式:先序、中序和后序。先序遍历用栈记录节点,先压右子节点再压左子节点。中序遍历利用栈模拟递归,访问左子树为空的节点。后序遍历可用两个栈(易理解,空间O(n))或一个栈(空间O(h),更复杂)实现。 遍历的时间复杂度为O(n),空间复杂度通常为O(h),Morris遍历可实现O(1)空间复杂度。


016 双端队列-力扣641-双链表和固定数组实现

这篇博客介绍了循环双端队列的2种实现方式:双链表LinkedList和固定数组。双链表(自己实现)实现速度较快,但需手动编写节点类;LinkedList实现简单,但效率稍逊;固定数组实现适用于已知队列大小上限的情况,通过取模运算或等价逻辑循环利用数组空间。选择哪种实现取决于具体需求和性能考量。


013【入门】队列和栈-链表、数组实现

本博客介绍了队列和栈的基本概念及其链表和数组实现。队列遵循先进先出(FIFO)原则,而栈遵循后进先出(LIFO)原则。重点讲解了数组实现队列时环形队列的设计,以及栈和队列的常见操作。最后通过力扣622题展示了环形队列的实际应用和解法。


014【入门】队列和栈入门题目-栈和队列相互实现

本篇介绍了如何用栈模拟队列(均摊O(1))和用队列模拟栈。栈模拟队列使用双栈倒数据,需注意倒数据时机和完整性。队列模拟栈,可用双队列或单队列实现,单队列每次push时需将之前元素重排。双端队列ArrayDeque也可高效实现栈。


015 最小栈-力扣155

实现常数时间获取最小值的栈(MinStack)。主流方法是维护一个辅助栈记录每个位置的最小值,保证getMin()的O(1)复杂度。文章展示了基于Java内置栈、数组以及单链表三种实现方式,链表解法每个节点额外存储当前最小值。


011 链表入门题目-两个链表相加

本博客讲解了力扣2.两数相加,用链表逆序存储非负整数,并返回它们的和(链表形式)。解题思路是模拟手算加法,处理进位。代码部分提供了Java实现。此外,博客还补充了力扣67.二进制求和,思路类似。


012 链表入门题目-划分链表-哑节点

此博客讲解了链表分隔(力扣86):将链表按给定值x分成小于x和大于等于x两部分,保持原相对顺序。核心是用两个哑节点分别指向两部分链表头,遍历原链表并按节点值连接到对应哑节点后,拼接两链表。补充题是力扣328-奇偶链表,思路类似。


009 单双链表及其反转-堆栈诠释

这篇博客主要讲解链表相关知识,首先强调了按值传递与按引用传递的区别。然后介绍了单链表和双链表的定义,并重点通过 LeetCode 206和92 题详细讲解了链表反转的迭代解法,展示了使用指针调整链表结构的思路,最后给出了双链表反转的迭代代码。作者认为链表题是检验编码能力的重要手段。


010 链表入门题-力扣21-合并两个升序链表

这篇博客讲解了如何合并两个升序链表(LeetCode 21)。提供了递归和非递归两种解法。递归解法简洁,通过比较头节点大小,递归合并剩余部分。非递归解法则通过迭代,使用 pre 指针连接较小节点,最终合并两个链表。链表题能有效考察编码能力。


023 随机快速排序

经典随机快速排序和用荷兰国旗问题优化后的随机快速排序。经典快排易受重复元素影响,优化后的版本通过荷兰国旗问题将数组划分为小于、等于、大于x三部分,提升效率。文章分析了普通快排和随机快排在不同情况下的时间和空间复杂度,强调随机选择的重要性,并指出随机快排的期望时间复杂度为O(n log n),空间复杂度为O(log n)。


java基础(1) 按值传递

Java 采用按值传递,方法接收的是实参值的副本。基本类型传递值的副本,引用类型传递对象地址的副本。方法内修改对象会影响原始对象,但重新赋值引用不会。可理解为“按引用传递”传递地址副本,但Java始终传递的是值的副本。设计目的是规避C/C++指针的复杂性,利于工程开发。


008 数据结构和算法 简介

左老师将算法分为硬计算(精确求解,复杂度可能高,程序员必备,面试常考)和软计算(逼近求解,时间可控,算法工程师需要)两类。数据结构则宏观地分为连续结构和跳转结构,所有数据结构都是这两者的组合。


007 时间复杂度和空间复杂度

算法分析与设计的关键概念,包括时间/空间复杂度、常数时间操作、均摊分析,以及递归与分治策略。特别强调了不能仅凭代码结构判断时间复杂度,需理解算法本质。覆盖了二进制运算、排序算法、KMP算法等,适合算法初学者。


021 归并排序merge sort

归并排序通过递归或非递归方式,将数组分为有序左右两部分,再利用merge过程整体排序。Merge过程比较左右元素,小的放入辅助数组并拷贝回原数组。时间复杂度O(n log n),空间复杂度O(n)。 归并排序效率高于O(n^2)排序,因为比较行为不浪费。可用于解决力扣912题,需用静态辅助数组。


022 归并分治

归并分治将问题分解为左右子问题及跨越左右的答案。若左右有序能简化跨越部分计算,则适合归并分治。解题时融入归并排序保证左右有序。牛客小和累积和与力扣493翻转对是典型例题,关键在于高效统计跨越左右的答案。归并分治也可用线段树等解决,并能处理更复杂问题。


算法笔试中处理输入与输出

有填函数(框架处理I/O)和ACM风格(需自行处理I/O)两种。ACM推荐使用BufferedReader/PrintWriter等高效I/O类,避免Scanner/System.out。不推荐临时动态空间,优先使用全局静态空间预分配内存。Kattio和FastReader/Writer可处理特殊情况,但StreamTokenizer效率更高。


020 递归和master公式

递归需画图辅助理解,底层用系统栈实现。任何递归可转非递归,工程上常需避免栈溢出。Master公式适用于子问题规模相同的递归,根据log(b,a)与c关系判断复杂度。特例T(n) = 2*T(n/2) + O(n*logn)复杂度为O(n * (logn)^2)。


017 二叉树及其三种序的递归实现

二叉树及其三种序(先中后)的递归实现


041 最大公约数 最小公倍数 同余原理

力扣 878: 第 N 个神奇数字,同余原理,这是处理大数运算的重要工具


三段逆置 力扣189 轮转数组

力扣189 轮转数组


摩尔投票算法 力扣169,229,1150,2404

力扣169,229,1150,2404


numpy 19道练习题

比较简单


利用numpy对图像进行操作

NumPy 提供了强大的数组操作功能,Matplotlib 提供了图像读取和显示的功能,两者结合可以实现图像的翻转、颜色变换、降采样和打马赛克等效果。


力扣 169. 多数元素(摩尔投票算法)

169. 多数元素


力扣 229. 多数元素 II(摩尔投票算法)

229. 多数元素 II


力扣 27. 移除元素 26. 删除有序数组中的重复项 80. 删除有序数组中的重复项 II

3道题:27. 移除元素 26. 删除有序数组中的重复项 80. 删除有序数组中的重复项 II


力扣 88. 合并两个有序数组

88. 合并两个有序数组


100 KMP算法原理和代码详解

KMP 算法,一种时间复杂度为 O(n+m) 的高效算法。 文章从 next 数组的定义入手,逐步讲解 KMP 算法的匹配原理、next 数组的快速生成方法,并通过代码示例和复杂度分析,帮助读者彻底理解 KMP 算法的精髓。 此外,还展示了 KMP 算法在 LeetCode 题目中的应用,以及与 Java 内置 indexOf 方法的性能对比。 除了KMP算法,还展示了“另一棵树的子树”的题目,如何使用暴力递归方式解决。


三月 0302~0308 力扣算法练习总结

题号 :1,9,13,14,162,20,21,26,27,28,35,58,66,67


006 二分搜索

在有序数组中查找特定元素是否存在、寻找大于等于某数的最左位置、小于等于某数的最右位置,以及在无序但相邻不相等的数组中寻找峰值(力扣162) 。


003~005 二进制和位运算,三傻排序算法,对数器

常见位运算的原理,正数和负数在计算机中如何用二进制表示,及互相转换方法,计算机不会自动处理溢出。冒泡、选择、插入排序的思路及代码。对数器的概念和实现,用于验证算法正确性,特别是没有在线测试环境时。包括如何生成随机数据、编写暴力解、比较结果等。


Oracle(1) 安装与配置,基本概念

安装(docker拉取镜像)与配置,基本概念等


4 多变量线性回归Linear Regression with Multiple Variables

梯度下降应用于多变量,特征缩放,多项式回归,正规方程及其不可逆性


week1-2练习题及答案

单变量线性回归,线性代数,多元线性回归,Octave练习


力扣 30天pandas挑战

33题 题目+测试数据+完成挑战


2-6 梯度下降知识点总结

导数项、学习率的直观理解


2-7 线性回归的梯度下降

线性回归问题运用梯度下降法(求偏导)


3 线性代数回顾

矩阵,向量,矩阵乘法,矩阵求逆转置(我补充了利用Numpy和Pandas进行运算的方法)


1-4 非监督学习

什么是无监督学习、无监督学习分类(聚类,信号分离)


2-1 模型描述

如何描述一个模型,单变量线性回归是什么


2-2 代价函数Cost Function

代价函数的数学定义、代价函数的直观理解


2-5 梯度下降 Gradient Descent

梯度下降的数学原理


1-3 监督学习Supervised Learning

监督学习的定义、分类(回归与分类)


1-1 欢迎参加《机器学习》课程

机器学习简介/例子


1-2 什么是机器学习

什么是机器学习、机器学习的分类


pandas超级重要函数-transform函数

返回与输入组具有相同形状的结果的transform函数


df长宽变形大师 - melt的重塑神功

pandas重塑函数-melt的介绍与练习


pandas(4)大数据处理技巧

pandas 第四部分:大数据处理技巧


pandas入门15题

pandas入门15题


pandas(2)数据分析

pandas 第二部分:数据分析


pandas(3)常用函数操作

pandas 第三部分:常用函数操作


NumPy 70题

NumPy 70道习题(题目+答案)


pandas(1)数据预处理

pandas 第一部分:数据预处理


numpy(10)NumPy的扩展:SciPy

第 10 章 NumPy 的扩展:SciPy


numpy(11)玩转 Pygame

第 11 章 玩转 Pygame


NumPy学习指南(第2版)阅读总结

一共11章,代码,笔记,齐全


numpy(8)质量控制

第 8 章 质量控制


numpy(9)使用Matplotlib绘图

第 9 章 使用Matplotlib绘图


读图片-jupyter notebook

三种方式+图像简单操作


numpy(7)专用函数

第 7 章 专用函数


numpy(5)矩阵和通用函数

第 5 章 NumPy矩阵和通用函数


numpy(6)深入学习NumPy模块

第 6 章 深入学习NumPy模块


numpy(4)便捷函数

第 4 章 NumPy便捷函数


numpy(3)常用函数

第 3 章 NumPy常用函数


numpy的广播和广播机制

NumPy的广播机制和重要,在机器学习、深度学习里的tensorflow和keras里使用了大量的广播计算,需深入理解广播机制。


numpy(2)_numpy基础

第 2 章 NumPy基础


MATHEMATICS FOR MACHINE LEARNING第二章 2.1~2.3 阅读笔记

chap2 Linear Algebra 2.1~2.3


IPython学习笔记

IPython学习-魔法命令、高级功能


numpy(1)_入门

1 NumPy快速入门-安装 2 体验NumPy中的数组对象


编译原理-测试

编译原理->中科大学习


2024

go基础

go基础01-go简介+hello world


Burpsuite

Repeater模块无法返回response


书籍阅读-Python灰帽子–黑客与逆向工程师的Python编程之道

Python灰帽子–黑客与逆向工程师的Python编程之道


手写Spring_篇章1

如何扫描+获取Bean(原型还是单例)