小航的算法日记
文章平均质量分 78
小航的算法日记
文艺倾年
学无止境!
展开
-
【小航的算法日记】线段树
本内容取经于:https://leetcode.cn/problems/my-calendar-i/solution/by-lfool-xvpv/原创 2022-09-12 15:48:23 · 152 阅读 · 0 评论 -
【小航的算法日记】字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。这是一个在面试中很好的问题。给你一个字符串 s ,颠倒字符串中 单词 的顺序。..原创 2022-08-30 11:35:40 · 257 阅读 · 2 评论 -
【小航的算法日记】图论
适用边数较多的稠密图(边数量 m ≈ 点数量 n2 )2.邻接表使用边数较少的稀疏图(边数量 m ≈ 点数量 n)【这种存图方式又称:链式前向星存图】遍历所有由 a 点发出的边:3.类【确保某个操作复杂度严格为 O(m) 时才使用】通过建立一个类来记录有向边信息:使用 List 存起所有的边对象,并在需要遍历所有边的时候,进行遍历:算法:拓扑排序:「入度」和「出度」的概念:在图论中,一个有向无环图必然存在至少一个拓扑序与之对应,反之亦然。很多时候给定的图存在负权边,这时类似Dijkstra原创 2022-08-12 11:21:10 · 269 阅读 · 0 评论 -
【字符串】最小表示法
给定一个字符串 s 和一个整数 k。你可以从 s 的前 k 个字母中选择一个,并把它加到字符串的末尾。字符串 S 的最小表示为与 S 循环同构的所有字符串中字典序最小的字符串。返回 在应用上述步骤的任意数量的移动后,字典上最小的字符串。最小表示法是用于解决字符串最小表示问题的方法。当字符串 S 中可以选定一个位置 i 满足。则称 S 与 T 循环同构。...原创 2022-08-03 12:16:32 · 835 阅读 · 0 评论 -
【小航的算法日记】数组
数组是存放在连续内存空间上的相同类型数据的集合。原创 2022-07-05 10:00:37 · 126 阅读 · 0 评论 -
【小航的算法日记】贪心算法
目录一、概念二、模板三、例题题:455. 分发饼干解:题:376. 摆动序列解:一、概念二、模板三、例题题:455. 分发饼干假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。示例原创 2022-06-22 12:51:15 · 149 阅读 · 0 评论 -
【小航的算法日记】并查集
文章目录一、概念二、模板三、例题684. 冗余连接一、概念二、模板int n = 1005; // 节点数量3 到 1000int father[1005];// 并查集初始化void init() { for (int i = 0; i < n; ++i) { father[i] = i; }}// 并查集里寻根的过程int find(int u) { return u == father[u] ? u : father[u] = find原创 2022-05-29 11:20:44 · 166 阅读 · 1 评论 -
【小航的算法日记】动态规划
目录一、概念二、模板三、例题题:509. 斐波那契数解:题:70. 爬楼梯解:笔记摘自代码随想录一、概念动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。区别:DP:每一个状态一定是由上一个状态推导出来的贪心:局部最优解,没有推导二、模板解题步骤:确定dp数组、下标含义递推公式初始化遍历顺序举例推导三、例题题:509. 斐波那契数斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。原创 2022-05-17 12:55:16 · 249 阅读 · 0 评论 -
【小航的算法日记】二叉树
目录一、概念二、模板1.递归遍历2.迭代遍历3.统一迭代法三、例题学习笔记摘自代码随想录一、概念满二叉树、完全二叉树、二叉搜索树、平衡二叉搜索树、二叉树的存储方式、遍历方式定义:public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {} TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode原创 2022-03-17 16:56:43 · 880 阅读 · 0 评论 -
【小航的算法日记】回溯法
原创 2022-02-17 12:32:46 · 324 阅读 · 0 评论 -
【小航的算法日记】字符串算法(三) - 字符串分割
目录一、概念二、模板三、例题题:58. 最后一个单词的长度解:一、概念二、模板三、例题题:58. 最后一个单词的长度给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。示例 1:输入:s = "Hello World"输出:5示例 2:输入:s = " fly me to the moon "输出:4示例 3:输入:s = "luffy is still joy原创 2022-02-13 14:25:26 · 9218 阅读 · 6 评论 -
【小航的算法日记】字符串算法(一) - 字符串遍历
目录一、概念二、模板三、例题题:1812. 判断国际象棋棋盘中一个格子的颜色解:题:LCP 17. 速算机器人解:题:2011. 执行操作后的变量值解:题:1876. 长度为三且各字符不同的子字符串解:题:520. 检测大写字母解:题:709. 转换成小写字母解:题:1704. 判断字符串的两半是否相似解:题:1844. 将所有数字用字符替换解:一、概念字符串二、模板三、例题题:1812. 判断国际象棋棋盘中一个格子的颜色给你一个坐标 coordinates ,它是一个字符串,表示国际象棋棋盘中原创 2022-02-09 12:15:03 · 671 阅读 · 0 评论 -
【小航的算法日记】字符串算法(二) - 字符串比较
目录一、概念二、模板三、例题题:剑指 Offer 05. 替换空格解:题:面试题 10.05. 稀疏数组搜索解:题:1763. 最长的美好子字符串解:一、概念二、模板三、例题题:剑指 Offer 05. 替换空格请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = "We are happy."输出:"We%20are%20happy."限制:0 <= s 的长度 <= 10000解:解题思路:遍历AC代码:class Solutio原创 2022-02-09 12:13:48 · 663 阅读 · 0 评论 -
【小航的算法日记】进制转换(二) - 进阶
目录一、概念二、模板三、例题题:202. 快乐数解:题:168. Excel表列名称解:题:171. Excel 表列序号解:题:483. 最小好进制解:一、概念转化不常用的进制、对应偏移二、模板看例题三、例题题:202. 快乐数编写一个算法来判断一个数 n 是不是快乐数。「快乐数」 定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1,那么这个数就是快乐数。如果 n原创 2022-02-07 15:11:54 · 640 阅读 · 0 评论 -
【小航的算法日记】进制转换(一) - 入门
目录一、概念二、模板三、例题题:剑指 Offer 15. 二进制中1的个数解:题:258. 各位相加解:题:1290. 二进制链表转整数解:题:1837. K 进制表示下的各位数字总和解:题:1399. 统计最大组的数目解:题:504. 七进制数解:题:405. 数字转换为十六进制数解:一、概念x进制转y进制,负数补码问题二、模板看例题三、例题题:剑指 Offer 15. 二进制中1的个数编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也原创 2022-02-06 15:26:01 · 186 阅读 · 0 评论 -
【小航的算法日记】线性枚举(二) - 统计法入门
目录一、概念二、模板三、例题题:1550. 存在连续三个奇数的数组解:题:1295. 统计位数为偶数的数字解:一、概念二、模板三、例题题:1550. 存在连续三个奇数的数组给你一个整数数组 arr,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回 true ;否则,返回 false 。示例 1:输入:arr = [2,6,4,1]输出:false解释:不存在连续三个元素都是奇数的情况。示例 2:输入:arr = [1,2,34,3,4,5,7,23,12]输出:t原创 2022-02-05 16:43:04 · 428 阅读 · 0 评论 -
【小航的算法日记】 线性枚举(一) - 最值算法
目录一、概念二、模板三、例题题:485. 最大连续 1 的个数解:题:1464. 数组中两元素的最大乘积解:一、概念二、模板三、例题题:485. 最大连续 1 的个数给定一个二进制数组 nums , 计算其中最大连续 1 的个数。示例 1:输入:nums = [1,1,0,1,1,1]输出:3解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.示例 2:输入:nums = [1,0,1,1,0,1]输出:2提示:1 <= nums.length原创 2022-02-02 11:43:05 · 188 阅读 · 0 评论 -
【小航的算法日记】变量交换算法
目录一、概念二、模板三、例题题:面试题 16.01. 交换数字解:题:面试题 05.07. 配对交换解:内容摘自英雄哥,详情请看英雄哥,以下是java版一、概念变量交换二、模板编写一个函数,不用临时变量,直接交换 a 与 b 的值 。void swap(int a, int b){ a = a + b; b = a - b; a = a - b; }三、例题题:面试题 16.01. 交换数字编写一个函数,不用临时原创 2022-01-31 09:10:14 · 118 阅读 · 2 评论 -
【小航的算法日记】二分快速幂
目录一、概念二、模板三、例题题:50. Pow(x, n)解:题:372. 超级次方解:题:343. 整数拆分题:1969. 数组元素的最小非零乘积题:1808. 好因子的最大数目内容摘自英雄哥,以下为Java版一、概念二分快速幂二、模板请看例题2三、例题题:50. Pow(x, n)实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn )。示例 1:输入:x = 2.00000, n = 10输出:1024.00000示例 2:输入:x = 2.10000, n原创 2022-01-30 11:39:36 · 1002 阅读 · 0 评论 -
【小航的算法日记】最小公倍数
目录一、概念二、模板三、例题题:1819. 序列中不同最大公约数的数目解:一、概念lcm(a,b)=abgcd(a,b)lcm\left( a,b \right) =\frac{ab}{gcd\left( a,b \right)}lcm(a,b)=gcd(a,b)ab推导:由算术基本定理得:a=p1x1p2x2⋅⋅⋅pkxka=p_{1}^{x_1}p_{2}^{x_2}···p_{k}^{x_k}a=p1x1p2x2⋅⋅⋅pkxkb=p1y1p2y2⋅⋅⋅pkykb=p_原创 2022-01-29 12:47:21 · 1373 阅读 · 0 评论 -
【小航的算法日记】最大公约数
目录一、概念二、模板三、例题题:1979. 找出数组的最大公约数解:题:LCP 02. 分式化简解:题:1819. 序列中不同最大公约数的数目解:一、概念二、模板三、例题题:1979. 找出数组的最大公约数给你一个整数数组 nums ,返回数组中最大数和最小数的 最大公约数 。两个数的 最大公约数 是能够被两个数整除的最大正整数。示例 1:输入:nums = [2,5,6,9,10]输出:2解释:nums 中最小的数是 2nums 中最大的数是 102 和 10 的最大公约数是 2原创 2022-01-28 14:52:51 · 163 阅读 · 0 评论 -
【小航的算法日记】因子和
目录一、概念二、模板三、例题题:1390. 四因数解:一、概念因子和二、模板看例题三、例题题:1390. 四因数给你一个整数数组 nums,请你返回该数组中恰有四个因数的这些整数的各因数之和。如果数组中不存在满足题意的整数,则返回 0 。示例:输入:nums = [21,4,7]输出:32解释:21 有 4 个因数:1, 3, 7, 214 有 3 个因数:1, 2, 47 有 2 个因数:1, 7答案仅为 21 的所有因数的和。提示:1 <= nums.leng原创 2022-01-27 12:57:39 · 784 阅读 · 0 评论 -
【小航的算法日记】因子数
目录一、概念二、模板三、例题一、概念素因子分解二、模板给定 x , y ( x , y < 231 ) ,求 xy的因子数 mod p。xy=(p1e1p2e2⋅⋅⋅pkek)yx^y=\left( p_{1}^{e_1}p_{2}^{e_2}···p_{k}^{e_k} \right) ^yxy=(p1e1p2e2⋅⋅⋅pkek)y =(p1ye1p2ye2⋅⋅⋅pkyek)\ \ \ \ =\left( p_{1}^{ye_原创 2022-01-27 11:21:40 · 1781 阅读 · 0 评论 -
【小航的算法日记】因子分解和枚举
目录一、概念二、模板三、例题题:1952. 三除数解:题:1492. n 的第 k 个因子解:题:1362. 最接近的因数解:题:1808. 好因子的最大数目解:详情请看英雄哥的专栏,以下是Java版一、概念素因子二、模板三、例题题:1952. 三除数给你一个整数 n 。如果 n 恰好有三个正除数 ,返回 true ;否则,返回 false 。如果存在整数 k ,满足 n = k * m ,那么整数 m 就是 n 的一个 除数 。示例 1:输入:n = 2输出:false解释:2 只原创 2022-01-26 14:19:47 · 392 阅读 · 0 评论 -
【小航的算法日记】算术基本定理
目录一、概念二、模板三、例题题:507. 完美数解:题:263. 丑数解:详情请看英雄哥的专栏内容,以下为Java版一、概念对于每个整数 n,都可以唯一分解成素数的乘积二、模板三、例题题:507. 完美数对于一个 正整数,如果它和除了它自身以外的所有 正因子 之和相等,我们称它为 「完美数」。给定一个 整数n, 如果是完美数,返回 true;否则返回 false。示例 1:输入:num = 28输出:true解释:28 = 1 + 2 + 4 + 7 + 141, 2, 4, 7原创 2022-01-25 10:01:23 · 301 阅读 · 0 评论 -
【小航的算法日记】素数筛选
目录一、概念二、模板三、例题题:1175. 质数排列解:题:剑指 Offer 49. 丑数解:详情请看英雄哥的专栏,以下是Java版一、概念Eratosthenes筛选法(如果3是素数,那么6,9,12···一定不是素数)、欧拉筛法、拉宾-米勒 (R a b i n − M i l l e r Rabin-MillerRabin−Miller) 大数二、模板统计所有小于等于非负整数 n ( 0 ≤ n ≤ 5 × 106 ) 的素数的数量。int countPrimes(int n){原创 2022-01-24 16:36:37 · 105 阅读 · 0 评论 -
【小航的算法日记】素数判定
目录一、概念二、模板三、例题题:866. 回文素数解:题:剑指 Offer 49. 丑数解:具体内容请看英雄哥解释,以下是Java版一、概念性质:任意性传递性可消性组合型二、模板素数判定模板:boolean isPrime(int n) { if(n <= 1) return false; if(n == 2) return true; // 一定要先写2是素数 if((n & 1) == 0) return fals原创 2022-01-23 16:31:30 · 505 阅读 · 0 评论 -
【小航的算法日记】日期算法
目录一、概念二、模板三、例题题:1185. 一周中的第几天解:一、概念闰年(四年一润&&一百年不润||四百年一润)二、模板boolean isLeapYear(int year) { return (year % 4 == 0 && year % 100 != 0 || (year % 400 == 0);}三、例题题:1185. 一周中的第几天给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。输入为三个整数:day、month 和 year,原创 2022-01-19 12:41:24 · 511 阅读 · 0 评论 -
【小航的算法日记】计数法
目录一、概念二、模板三、例题题:1748. 唯一元素的和解:题:387. 字符串中的第一个唯一字符解:题:1941. 检查是否所有字符出现次数相同解:题:448. 找到所有数组中消失的数字题:1512. 好数对的数目题:1711. 大餐计数一、概念计数二、模板统计出现一次的数字和:class Solution { public int sumOfUnique(int[] nums) { // 计数数组 int[] count = new int[101];原创 2022-01-14 10:34:19 · 201 阅读 · 2 评论 -
【小航的算法日记】组合数
目录一、概念二、模板三、例题一、概念二、模板三、例题原创 2022-01-14 00:14:07 · 153 阅读 · 0 评论 -
【小航的算法日记】Java-OJ常用API
目录0.基础模板:1.常用包2.输入输出基础:快速输入、输出:3.字符串字符串判等字符串判空字符串遍历字符串检索字符串提取4.数组5.ArrayList6.HashMap7.HashSet8.LInkedList在线OJ评测:传送门0.基础模板:import java.util.* //这里*可以看成一个退位符import java.lang.Mathimport java.io.*class Main{ public static int arr[] = new int原创 2022-01-11 11:27:31 · 627 阅读 · 2 评论 -
【小航的算法日记】大数计算
目录一、概念二、常用方法1.创建2.赋值一、概念java.math.*包中提供了大数类,其理论上可以存储无限位的大数,只要内存足够的话。大数类又分为整数和浮点数.即BigInteger and BigDecimal不能直接进行运算,整数和浮点数不能混合运算.二、常用方法1.创建//1.直接声明 BigInteger a;BigDecimal b;//2.使用构造函数初始化BigInteger a = new BigInteger("123456789101112131415");原创 2022-01-10 17:25:04 · 102 阅读 · 0 评论 -
【小航的算法日记】矩阵
矩阵模板原创 2022-01-08 17:04:12 · 153 阅读 · 0 评论 -
【小航的算法日记】数列
目录一、概念二、模板三、例题题:509. 斐波那契数解:题:1137. 第 N 个泰波那契数解:题:剑指 Offer 64. 求1+2+…+n解:题:896. 单调数列解题:1313. 解压缩编码列表题:剑指 Offer 57 - II. 和为s的连续正数序列题:829. 连续整数求和内容摘自英雄哥,以下为java版一、概念等差数列、等比数列、斐波那契数列二、模板求斐波那契数列的第N项:class Solution { public int fib(int n) { in原创 2022-01-03 21:34:30 · 548 阅读 · 0 评论 -
【小航的算法日记】幂和对数
目录一、概念二、模板三、例题题:231. 2 的幂解:题:326. 3 的幂题:342. 4的幂内容学习摘自英雄哥,这里给出Java版。一、概念幂、对数、换底公式二、模板// 判断n是否为a的幂次方class Solution { public boolean isPowerOfTwo(int n) { if(n == 0) return false; // 底数为0,判空 int x = (int)(Math.log(n) / Math.log(a) +原创 2022-01-03 11:43:46 · 323 阅读 · 0 评论