常见算法的空间复杂度和时间复杂度
以下是常见算法的时间复杂度和空间复杂度总结,按算法类型分类,并附典型示例:
一、排序算法
算法
平均时间复杂度
最坏时间复杂度
空间复杂度
是否稳定
冒泡排序
O(n²)
O(n²)
O(1)
是
选择排序
O(n²)
O(n²)
O(1)
否
插入排序
O(n²)
O(n²)
O(1)
是
快速排序
O(n log n)
O(n²)
O(log n)
否
归并排序
O(n log n)
O(n log n)
O(n)
是
堆排序
O(n log n)
O(n log n)
O(1)
否
计数排序
O(n + k)
O(n + k)
O(n + k)
是
桶排序
O(n + k)
O(n²)
O(n + k)
是
基数排序
O(n × k)
O(n × k)
O(n +...
C++20的ranges::命名空间
在 C++20 中,<algorithm>头文件中的许多算法被引入了
std::ranges命名空间,这些算法支持范围(Range)概念,提供了更现代、更安全的接口。以下是
C++20 std::ranges中主要的算法分类和示例:
1.
不修改序列的算法(Non-modifying)
查找类:
ranges::find/ ranges::find_if/
ranges::find_if_not
ranges::find_first_of
ranges::adjacent_find
ranges::search/ ranges::search_n
ranges::find_end
ranges::binary_search(需范围有序)
ranges::lower_bound/ ranges::upper_bound/
ranges::equal_range(需范围有序)
计数类:
ranges::count/...
Linux基本命令
1. 查CPU和IP命令
查CPU信息:
lscpu # 查看CPU架构信息cat /proc/cpuinfo # 详细CPU信息
查IP地址:
ip a # 推荐(新版)ifconfig # 旧版(需安装net-tools)hostname -I # 仅显示IP
2. 常用Linux命令分类
文件操作:ls, cp,
mv, rm, chmod
文本处理:cat, grep,
sed, awk, head/tail
系统监控:top, ps,
free, df, netstat
权限管理:chown, chmod,
sudo
网络工具:ping, curl,
wget, ssh
3.
cp和chmod 777含义
cp:复制文件/目录
cp file1 file2 # 复制文件cp -r dir1 dir2 # 递归复制目录
chmod...
C++求最大公约数
C++
求最大公约数(GCD)的方法详解
最大公约数(Greatest Common
Divisor,GCD)是指能够整除两个或多个整数的最大正整数。以下是几种在C++中求最大公约数的方法:
1. 辗转相除法(欧几里得算法)
这是最经典高效的求 GCD 算法,基于以下原理: \[
gcd(a, b) = gcd(b, a \% b)
\]
#include <iostream>// 递归实现int gcd_recursive(int a, int b) { if (b == 0) return a; return gcd_recursive(b, a % b);}// 迭代实现int gcd_iterative(int a, int b) { while (b != 0) { int temp = b; b = a % b; a = temp; } return a;}int main() { ...
每周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>...