二分查找学习笔记
二分查找学习笔记
前言
二分查找也称折半查找,它是一种效率较高的查找方法。二分查找,思路很简单,细节是魔鬼。
本文主要探究几个最常用的二分查找场景:寻找一个数、寻找左侧、右侧边界。到底要给 mid 加一还是减一,while 里到底用 <= 还是 <,并给出二分模板。
寻找一个数
寻找一个数的问题是最简单最熟悉的,下面的代码相信你也很熟悉:
123456789101112131415int binarySearch(int[] nums, int target) { if (nums.length == 0) return -1; int left = 0; int right = nums.length - 1; // 注意 while (left <= right) { // 注意 int mid = left + (right - left) / 2; if (nums[mid] == target) return mid; else if ( ...
Hexo 常用插件推荐
Hexo 常用插件推荐
Hexo 本身提供了一个框架,通过丰富的拓展插件,能够进一步优化使用体验,你可以在 Hexo 插件 中寻找适合你的拓展。
生成永久链接
hexo 文章链接默认的生成规则是::year/:month/:day/:title,即按照年、月、日、标题的顺序
当文件名为中文时,会导致 url 链接中也出现中文
1https://emoryhuang.github.io/blog/2021/05/09/Hexo %E5%B8%B8%E7%94%A8%E6%8F%92%E4%BB%B6%E6%8E%A8%E8%8D%90
这样的链接非常不利于阅读,也不美观
hexo-abbrlink 插件通过算法为文章生成永久链接,相对来说更加简洁方便。
安装 hexo-abbrlink 插件
1npm install hexo-abbrlink --save
修改 config.yml 文件中的永久链接:
1234permalink: blog/:abbrlink.html # 也可以直接写 :abbrlink/abbrlink: alg: crc32 #算法: crc16(d ...
传统图像边缘检测方法
传统图像边缘检测方法
引言
图像轮廓边缘指的是图像中目标对象和背景之间的区分明显的交界线。对于数字图像来说,图像边缘是数字图像中灰度变化比较大的点,它是物体最基本的特征之一。基于图像边缘灰度剧烈变化的特征,传统的边缘检测方法往往根据灰度变化的情况进行边缘提取。
本文主要介绍传统边缘检测方法的基本思路以及实现方法,主要对 Sobel 边缘检测方法,Canny 边缘检测方法进行具体分析,讨论了其优缺点,最后指出了对传统边缘检测方法的一些改进措施。
传统边缘检测方法的基本思路
由于物体边缘处的灰度变化剧烈,因此传统的边缘检测方法大多利用这个特点,通过计算像素的梯度判断当前像素点是否为边缘像素点。首先通过滤波器进行平滑处理,以减小噪声对边缘检测产生的影响;其次计算梯度,寻找梯度变化最大的像素点,得到边缘像素点;最后进行阈值处理,通过设定合适的阈值确定真正的边缘,排除非边缘点。Sobel 算子与 Canny 算子边缘检测结果如下图所示:
Sobel 边缘检测算法
Sobel 算子是由美国计算机科学家 Irwin Sobel 和 Gary Feldman 于 1968 年首次提出的,他充分利用一 ...
使用 LaTeX 写数学公式
使用 LaTeX 写数学公式
LaTeX 是一种高质量的排版格式,可以生成复杂的表格与数学公式,是当前电子与数学出版行业的事实标准,相信很多人都应该或多或少听说过 LaTeX。LaTeX 简单来说就是一种文字处理软件 / 计算机标记语言,可以通过简单的语法写出优雅的数学公式。
LaTeX 公式手册
→\rightarrow→ LaTeX 公式手册
LaTeX 简单入门
行内公式与行间公式
LaTeX 有行内公式和行间公式两种形式,简单来说:
行内公式: 公式嵌入在行内
行间公式: 公式独占一行
1这是一个行内公式:$f(x) = x + 2$
效果如下所示:
这是一个行内公式:f(x)=x+2f(x) = x + 2f(x)=x+2
1234这是一个行间公式, 它需要独立成行$$f(x) = x + 2$$
效果如下所示:
这是一个行间公式, 它需要独立成行
f(x)=x+2f(x) = x + 2
f(x)=x+2
基本运算符
拉丁字母、阿拉伯数字和 +,-,*,/,= 运算符均可以直接输入获得
1$a + b - c * d / e = x + 1$
效果如下所示:
...
快速幂算法详解
快速幂算法详解
前言
首先考虑这么一个问题
给定三个正整数 a, b, m(a < 10910^9109,b < 10910^9109,1 < m < 10910^9109),求 aba^bab % m。
对于这个问题,只要写一个简单的循环就能够搞定
12345678// 普通求幂long long QuickPow(long long a, long long b, long long m) { long long ans = 1; for (int i = 0; i < b; i++) { ans = ans * a % m; } return ans;}
然而,当 a, b 到达一定值时,最终的结果会非常大,对于这个问题,O(b)的时间复杂度很难进行。
快速幂算法
快速幂,就是用效率更高(时间复杂度更低)的方法求幂,可以将时间复杂度优化至 O(logn)
递归快速幂
快速幂算法的关键在于对指数 b 的处理,我们很容易得到如下事实:
若 b 为奇数,则ab=a×ab−1a^ ...
搭建博客图床
搭建博客图床
前言
随着博客内容的增加,文章图片的数量也不断增长,如何引用存储图片就成了一个问题。对于我这样没什么访问量,只是写给自己看的博客,要求就是简单方便(当然能白嫖最好 😬),最后采用 GitHub + JsDelivr + uTools 图床插件的办法。
图床选择
先来说一下其他图床吧,简单来说,如果你有一个备案域名的话,做什么事都比较简单,国内的许多平台的对象存储都需要一个 备案域名。如果像我一样仅仅是为 Hexo + github pages 博客搞个图床,感觉再弄那些就有些麻烦了。
公益图床
公益图床简单来说就是一些免费的图床,缺点就在于速度确实有些慢了,毕竟免费->盈利有限->服务器也有限
SM.MS: 比较有代表性的一个免费图床,我之前用的也是 SM.MS 除了速度慢点,偶尔上传失败,总体来说也算是比较好用的。
路过图床: 没有使用过,也不多说
基于对象存储
国内的许多平台都有对象存储服务,比如阿里云,腾讯云,又拍云,七牛云等,对于访问量比较小的网站,总体来说存储费用也不会太贵
阿里云: 阿里云 OSS 还是比较好的,计费情况你可以参考 ...
打造精致的 Windows 终端
打造精致的 Windows 终端
前言
本文致力于 Windows Terminal + Oh my posh 打造精致的 Windows 终端。😐
Windows Terminal
Windows Terminal is a new, modern, feature-rich, productive terminal application for command-line users. It includes many of the features most frequently requested by the Windows command-line community including support for tabs, rich text, globalization, configurability, theming & styling, and more.
Windows Terminal 是一个新的,现代的,功能丰富的,高效的终端应用程序,适用于命令行用户。 它包含 Windows 命令行社区最常请求的许多功能,包括对选项卡,富文本,全球化,可配置性, ...
Git 基本使用
Git 基本使用
Git 是什么?
Git 是一个免费的开源分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有内容。
Git 易于学习,占用空间小,具有闪电般的快速性能。它具有廉价的本地分支,方便的暂存区域和多个工作流等功能,其性能优于 SubCM,CVS,Perforce 和 ClearCase 等 SCM 工具。
分布式开发
免费开源
速度快、体积小
很多新手误以为 Git 就是 GitHub,事实上 Git 是一个版本控制系统,而 GitHub 是一个商业网站,虽然 GitHub 很好用,但是 Git 才是本体。
Git 安装
安装 Git 的步骤非常简单,在 官方网站 直接下载安装,安装步骤这里就省略了,安装完成后会发现鼠标右键出现Git Bash Here字样,或者在菜单里搜索 Git Bash 即可。
配置用户名和邮箱
初次安装 Git 需要配置用户名和邮箱,在 Git Bash 中进行如下配置。
12git config --global user.name "你的用户名"git config --global user.email ...
MarkDown 写作语法
MarkDown 写作语法
Markdown 是一种轻量级标记语言,创始人为约翰・格鲁伯。它允许人们使用易读易写的纯文本格式编写文档,然后转换成有效的 XHTML(或者 HTML)文档。 这种语言吸收了很多在 电子邮件中已有的纯文本标记的特性。由于 Markdown 的轻量化、易读易写特性,并且对于图片,图表、数学式都有支持,目前许多网站都广泛使用 Markdown 来撰写帮助文档或是用于论坛上发表消息。
Markdown 编辑器
Markdown 有许多优秀的编辑器,下面简单介绍几款,大家用自己常用的就好:
Typora: 美观、简洁、高效
Atom: GitHub 开发
Visual Studio Code: 免费开源,各种强大,也是我一直在用的,用来写什么都行
Sublime Text 3: 收费,拓展齐全
当然,你也可以在 dillinger、editor.md等在线 Markdown 编辑器里进行写作练习。
MarkDown 标题
MarkDown 标题的表示非常简单,使用 # 号即可,1-6 级标题可以分别用 1-6 个 # 表示,如下所示:
123456# 这是一 ...
Hexo + Fluid 美化
本博客的主题已由 Fluid 改为 Butterfly, 部分功能可能失效,请注意!
Hexo + Fluid 美化
Fluid 简介
Fluid 是基于 Hexo 的一款 Material Design 风格的主题,由 Fluid-dev 负责开发与维护。
主题 GitHub: https://github.com/fluid-dev/hexo-theme-fluid
预览网站:
Fluid’s Blog
zkqiang’s blog
Fluid 主题安装
方式一
Hexo 5.0.0 版本以上,推荐通过 npm 直接安装,进入博客目录执行命令:
1npm install --save hexo-theme-fluid
提示:如果 npm 速度慢或者安装失败,可以通过淘宝镜像安装,即使用如下命令
1cnpm install --save hexo-theme-fluid
然后在博客目录下创建 _config.fluid.yml,将主题的 config.yml 内容复制进去。
方式二
下载 最新 release 版本 解压到 Hexo 博客目录中的 themes 目录,并将解压 ...