Marlin's Blog

「编译当下,重构未来」

位运算实现加减乘除

位运算实现加减乘除 前提:位运算实现加减乘除,过程中不能出现任何算数运算符。 加法 利用每一步无进位相加的结果+进位的结果不停计算,直到进位消失。 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...

堆结构常见题

堆结构常见题 1. 合并 k 个有序链表 给定 k 个有序链表,每个链表的元素值都按升序排列,请将它们合并为一个有序链表,并返回合并后的链表。 思路: 创建一个最小堆,将 k 个链表的头结点放入堆中。 取出堆顶的结点,将其指向的下一个结点放入堆中。 重复步骤 2,直到堆为空。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ...

自定义比较规则

C++ STL有序关系定制指南

自定义比较规则 在算法竞赛中,当处理自定义结构体时,必须明确定义数据的比较规则:比如按年龄、成绩、姓名等进行升降序排序。 此时,我们需要自定义比较规则,以便对数据进行排序。 数组排序 如果是简单的对于数组进行排序,可通过传递比较函数实现。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 struct Point { int x, y; };...

洪水填充

Flood Fill

洪水填充 洪水填充算法(Flood Fill Algorithm)是一种用于填充图像中指定区域为同一颜色或值的算法。 洪水填充算法的基本思路是:从给定的起始点开始,将起始点所在区域填充为同一颜色或值,然后沿着边界向内扩展,填充相邻的未访问的点,直到填充完所有相邻的未访问的点。 题目 1 岛屿数量 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18...

堆结构和堆排序

heap structure and heap sort

堆结构 最大堆: 父节点的值大于等于其子节点的值 最小堆: 父节点的值小于等于其子节点的值 本文以最大堆为例。 堆中最重要的操作为向上调整和向下调整。 向上调整(Heapify Up):将一个节点向上移动,直至其父节点的值小于等于其子节点的值。 0-based 数组下标时,i 的父节点为 (i-1)/2。 向下调整(Heapify Down):将一个...

随机快速排序

randomized quicksort

随机快速排序 算法原理 随机快速排序(Randomized Quicksort)是一种基于快速排序的排序算法,它在快速排序的基础上,通过引入随机化来减少最坏情况的发生。 随机快速排序的基本思想是:在快速排序的过程中,随机选取一个元素作为枢轴(pivot),然后将数组分成两个子数组,左边的子数组中的元素都小于等于枢轴,右边的子数组中的元素都大于等于枢轴。然后对两个子数组分别递归地进行快速...

最近公共祖先

LCA

最近公共祖先(LCA) 最近公共祖先(LCA)是一种树形数据结构的算法,用于在一棵树或图中找到两个节点的最近公共祖先。 朴素算法 逐级向上遍历,直到找到两个节点的公共祖先。 先对树进行预处理,得到每个节点的父节点和深度。时间复杂度为 $O(n)$。 之后,对于每个查询,从根节点开始,逐级向上遍历,直到找到两个节点的公共祖先。时间复杂度为 $O(mh)$。 总时间复杂度为 $O(n+mh...

正则表达式

本文大量参照了正则表达式30分钟入门教程,并结合自己的理解进行了补充和修改。 正则表达式(Regular Expression,简称Regex或RegExp)是一种用于描述、匹配和处理文本模式的工具,它通过特定的语法规则来定义字符串的匹配模式,广泛应用于文本搜索、替换、验证等场景。以下是关于正则表达式的详细介绍: 一、核心概念与作用 模式描述 用简洁的符号组合描述字符串的规则,例如...