每周LeetCode回顾-2
633.
平方数之和
思路:双指针
对于给定的非负整数 \(c\),需要判断是否存在整数 \(a\) 和 \(b\),使得 \(a^2+b^2=c\)。可以枚举 \(a\) 和 \(b\) 所有可能的情况,时间复杂度为 \(O(c^2)\)。但是暴力枚举有一些情况是没有必要的。例如:当
\(c=20\) 时,当 \(a=1\) 的时候,枚举 \(b\) 的时候,只需要枚举到 \(b=5\) 就可以结束了,这是因为 \(1^2+5^2=25>20\)。当 \(b>5\) 时,一定有 \(1^2+b^2>20\)。
假设 \(a\leq b\),初始时 \(a=0\),\(b=\sqrt
c\),进行如下操作:
如果 \(a^2+b^2=c\),我们找到了题目要求的一个解,直接返回
true;
如果 \(a^2+b^2<c\),此时需要将
\(a\) 的值加 \(1\),继续查找;
如果 \(a^2+b^2>c\),此时需要将
\(b\) 的值减 \(1\),继续查找。
当...
C++容器-string
C++中的string容器详解
std::string是C++标准库中用于处理字符串的容器类,它提供了丰富的字符串操作功能,比C风格的字符数组(char[])更安全、更方便。
基本特性
动态大小:string可以动态调整大小,无需手动管理内存
丰富的操作:提供多种字符串操作方法
安全性:自动处理内存分配和释放,减少缓冲区溢出风险
兼容性:可以与C风格字符串互操作
头文件
使用string需要包含头文件:
#include <string>
构造函数
string提供了多种构造函数:
std::string s1; // 默认构造,空字符串std::string s2("Hello"); // 从C风格字符串构造std::string s3(s2); // 拷贝构造std::string s4(5, 'x'); // 构造包含5个'x'的字符串std::string s5(s2.begin(),...
C++中常用的数学函数
在C++中,常用的数学函数主要通过 <cmath>
头文件提供(C++中也可用
<math.h>,但推荐使用C++风格的头文件)。以下是一些常用的数学函数及其说明:
1. 基本运算
函数
描述
示例
abs(x)
绝对值(整数,<cstdlib>)
abs(-5) →
5
fabs(x)
浮点数的绝对值
fabs(-3.14) →
3.14
fmod(x, y)
浮点数取余
fmod(10.5, 3.0) →
1.5
remainder(x, y)
带符号的余数(IEEE规范)
remainder(10.5, 3.0) →
-0.5
fmax(x, y)
返回最大值
fmax(2.0, 3.0) →
3.0
fmin(x, y)
返回最小值
fmin(2.0, 3.0) →
2.0
2....
阿里云oss-picGo-typora搭建图床
Typora 图床设置
前言:因为开始记录博客,发现本地存储的图片路径与服务器路径总是不太一样,总是复制粘贴又不太方便,在此选择搭建图床来进行使用。
软件介绍
我们需要将图片上传到云(专业称图床)上,而云有多种,如下:
阿里云oss
专业,快速,存储空间便宜,一年9块钱40G。但是下行流量需要另外收费。
github...
C++中sort函数的详细使用指南
C++ sort
算法的详细使用指南
sort 是 C++ STL 中最常用的排序算法,定义在
<algorithm>
头文件中。它使用高效的排序算法(通常是快速排序的变体)对序列进行排序。
基本用法
1. 默认排序(升序)
#include <algorithm>#include <vector>#include <iostream>int main() { std::vector<int> nums = {4, 2, 5, 3, 1}; // 默认升序排序 std::sort(nums.begin(), nums.end()); for (int num : nums) { std::cout << num << " "; } // 输出: 1 2 3 4 5}
2. 降序排序
#include...
C++中常用的STL算法
C++ 中常用的 STL 算法
STL (Standard Template Library) 提供了大量实用的算法,主要定义在
<algorithm> 头文件中。以下是一些最常用的 STL
算法:
非修改序列操作
for_each -
对范围内的每个元素应用函数
std::vector<int> v{1, 2, 3};std::for_each(v.begin(), v.end(), [](int i){ std::cout << i << " "; });
all_of/any_of/none_of
- 检查范围中元素是否满足条件
bool all_even = std::all_of(v.begin(), v.end(), [](int i){ return i%2 == 0; });
修改序列操作
copy/copy_if -
复制元素
std::vector<int>...
在MarkDown中使用Latex写公式
LaTeX 公式完整示例
1. 行内公式
这是爱因斯坦质能方程:$E=mc^2$,其中 $E$ 是能量,$m$ 是质量,$c$ 是光速。
这是爱因斯坦质能方程:\(E=mc^2\),其中 \(E\) 是能量,\(m\) 是质量,\(c\) 是光速。
2. 独行公式
二次方程求根公式:
$$x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}$$
\[
x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}
\]
3. 多行公式(对齐)
利用 align 环境实现公式对齐:
$$\begin{align}f(x) &= (x+1)^2 \\ &= x^2 + 2x + 1\end{align}$$
\[
\begin{align}
f(x) &= (x+1)^2 \\
&= x^2 + 2x + 1
\end{align}
\]
4. 矩阵
一个...
Hexo配置Latex环境
我们用 hexo 搭建个人博客,会发现无法显示
markdown 文件里的 latex
公式,这是因为hexo默认支持的hexo-renderer-marked渲染器不支持latex公式。那我们应该怎样做才能支持显示latex公式呢?以
butterfly 主题为例,目前 butterfly
支持两种数学公式渲染引擎,分别为 Mathjax 和
Katex。由于 Mathjax 支持的更为全面,因此我们选择
Mathjax。
具体步骤如下:
卸载 hexo-math 和 hexo-renderer-marked。在 cmd 中输入如下命令:
npm un hexo-mathnpm un hexo-renderer-marked
安装 hexo-renderer-pandoc 渲染器,命令如下:
npm i hexo-renderer-pandoc
修改配置文件,修改 butterfly/_config.yml
# About the per_page# if you set it to true, it will...
TortoiseGit无法拉代码,但是GitBash可以
问题分析:TortoiseGit
无法拉取代码,但 Git Bash 可以
Git Bash 可以拉取 → 说明你的 SSH
密钥配置正确,Git Bash 能正确识别
~/.ssh/id_rsa(或 id_ed25519)。
TortoiseGit 报错 → 说明 TortoiseGit
没有正确加载 SSH 密钥,导致无法认证。
解决方案
1. 确保
TortoiseGit 使用正确的 SSH 客户端
TortoiseGit 默认使用
TortoiseGitPlink(PuTTY 的 SSH 工具),而
Git Bash 使用 OpenSSH。你需要确保
TortoiseGit 使用正确的 SSH 客户端:
打开 TortoiseGit 设置
右键 → TortoiseGit → Settings
进入 Network 选项卡
设置 SSH 客户端路径
确保 SSH Client 指向 Git 自带的
ssh.exe(而不是 TortoiseGitPlink.exe)
C:\Program...
每周LeetCode回顾-1
456.
132模式
思路:
从后往前遍历,维护一个单调递减的栈,同时使用
k 记录所有出栈元素的最大值。
class Solution {public: bool find132pattern(vector<int>& nums) { // 获取数组大小 int n = nums.size(); // 单调栈 stack<int> stk; // 存储 k int k = INT_MIN; // 利用单调栈使得一直满足 j < k for(int i = n-1; i >= 0; --i) { // 发现 k > i 的情况直接返回 true if(k > nums[i]) return true; while(!stk.empty() && stk.top()...