Marlin's Blog

「编译当下,重构未来」

Git使用与代理

为什么我的Git总是用不了?

本文借助 Roo Code Agent 自动排查并修正了我的 Git 配置,最终由它汇总整理成文。 Git 使用与代理 在使用 Git 时,特别是在某些网络环境下,我们可能需要配置代理才能正常访问远程仓库(如 GitHub)。本文将介绍如何正确配置 Git 代理以解决连接问题。 通常这种情况可以通过使用 GitHub Desktop 软件来解决,但是,如果使用命令行,则需要手动配...

常见经典递归总结

排列、组合、子集枚举

常见经典递归总结 子集枚举 题目 1 返回字符串的全部字序列 时间复杂度:$O(n*2^n)$(子集枚举+遍历) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 bool st[20]; set<string> set_str; void dfs(int x, stri...

根据数据量猜解法的技巧

天字第一号重要技巧

根据数据量猜解法的技巧 一个基本事实:C/C++运行时间1s,可以运行常数数量级的程序1e8次左右。所以可以根据这个事实,来猜测自己算法是否正确。 问题规模和可用算法 n 上限 安全复杂度 典型算法 / 思路 备注 ≤ 11 O(n!) 全排列、暴力状态...

对数器打表找规律的技巧

对数器打表找规律的技巧 使用场景 对数器打表找规律的使用场景:输入参数是简单类型,返回值也是简单类型。 步骤 可以用最暴力的实现求入参不大情况下的答案,往往只需要最基本的递归能力 打印入参不大情况下的答案,观察规律 把规律变成代码,就是最优解了 例子 题目1 用袋子买苹果问题 使用规格8和规格6的袋子买苹果问题。 输入n个苹果,苹果数量必须要装满袋子。问苹果数量能否...

最大公约数、同余原理

最大公约数、同余原理 最大公约数 定义 两个正整数 $a$ 和 $b$ 的最大公约数(GCD,Greatest Common Divisor)是指能够同时被 $a$ 和 $b$ 整除的最大的正整数。 求解 1. 辗转相除法 辗转相除法(Euclidean algorithm)是一种求最大公约数的算法。 时间复杂度为 $O((log a)^3)$。 设 $a$ 和 $b$ 为正整...

重要排序算法总结

重要排序算法总结 一、排序算法的稳定性 定义: 排序算法的稳定性是指:对于原始序列中两个相等的元素,在排序后它们的相对顺序不发生改变。 ✅ 稳定:相等元素的相对位置在排序前后保持一致。 ❌ 不稳定:相等元素的相对位置可能被颠倒。 稳定性的重要性: 对基础类型(如 int、double)无意义:因为值相同就无法区分,顺序无关紧要。 对非基础类型(如对象、结构体)有...

基数排序

基数排序 基于比较的排序 只需要定义好两个对象之间怎么比较即可,对象的数据特征并不关心,很通用。 不基于比较的排序 和比较无关的排序,对于对象的数据特征有要求,并不通用。 计数排序,非常简单,但是数值范围比较大了就不行了。 基数排序的实现细节,非常优雅的一个实现。 关键点:前缀数量分区的技巧、数字提取某一位的技巧。 时间复杂度 $0(n)$,额外空间复杂度 $0(m)$,需要辅助空间做...

位运算实现加减乘除

位运算实现加减乘除 前提:位运算实现加减乘除,过程中不能出现任何算数运算符。 加法 利用每一步无进位相加的结果+进位的结果不停计算,直到进位消失。 1 2 3 4 5 6 7 8 9 int add(int a, int b){ int ans = a; // a和b无进位相加的结果 while(b != 0){ // 进位信息不为0时循环 ans = a...

位运算的骚操作

位运算的骚操作 题目1 判断一个整数是不是2的幂 1 2 3 4 bool isPowerOfTwo(int n){ return n > 0 && n == (n & -n); // 或者return n > 0 && n & (n-1) == 0; } 题目2 判断一个整数是不是3的幂 1 2 3 boo...

位图

bitset

位图 原理 用bit组成的数组来存放值,用bit状态1、0代表存在、不存在,取值和存值操作都用位运算。 限制是必须为连续范围且不能过大。好处是极大的节省空间,因为1个数字只占用1个bit的空间。 常用操作 对位图内元素的操作 增:set(num) // 把num加入到位图 删:reset(num) // 把num从位图中删除 改:flip(num) // 取反num的bi...