记录个人算法学习过程的日常。
按学习阶段编号组织,每个目录是一个独立模块,内含若干 .java 类文件,每个类自带 main 方法作为运行入口与自测驱动。
src/
├── code01/ # 位运算基础
├── code02/ # 基础排序算法
└── code03/ # 二分查找专题
code01/BinarySystem— 整数的二进制位打印code02/Select— 选择排序,百万级随机数组对拍测试code02/Insert— 插入排序,百万级随机数组对拍测试code02/Bubble— 冒泡排序,百万级随机数组对拍测试code02/ArrayUtil—swap/randomArr/copyArr/isEql公共工具code03/BinarySearch— 升序数组中查找目标值是否存在(exist二分 /findNum暴力对拍)code03/FindLeft— 有序数组中找>= num的最左位置(二分)code03/FindLeftChecker—FindLeft的暴力对拍驱动,10 万次随机用例验证code03/FindRight— 有序数组中找<= num的最右位置(二分 + 暴力对拍)code03/FindPeakElement— 无重复元素数组中查找峰值下标(对应 LeetCode 162)
需要 JDK,无需额外依赖。
# 编译(以 code03 为例)
javac -d out src/code03/*.java
# 运行某个类(以 FindRight 为例)
java -cp out code03.FindRight也可直接在 IntelliJ IDEA 中打开 Algorithm.iml,右键 main 方法运行。
测试默认 100 万次随机用例,首次跑可能要几秒,可在 main 中调小 testTimes 快速验证。
- 每个算法类用
Arrays.sort作对拍基准,出现差异立即打印原始数据/系统排序/算法排序三者对比 - 工具方法统一放在
ArrayUtil,新增算法直接调用,不在类内重复定义 - 提交遵循 Conventional Commits,如
feat(code02): .../refactor(code02): ...