目录*表示该算法在蓝桥杯中的重要程度,最高5颗星,最低1颗星。
基础算法(这些不会就放弃蓝桥杯吧)
最大公约数(gcd)和最小公倍数(lcm)(*****)
日期是否合法(包含闰年和平年判断)(*****)
数的拆分 (*****)
判断质数(***)
组合排列(***)
排序 (**)
蓝桥杯必备算法(***以上必须掌握)
模拟 (*****)
DFS(深度优先搜索) (*****)
BFS(广度优先搜索)(****)
二分查找(****)
哈希数组(****)
前缀和(****)
简单DP(***)
贪心(***)
优先队列 (***)
双指针 (***)
差分(**)
树状数组 (*)
常用方法以及库函数
输入
输出
自动类型转换auto
算法实例基础算法1. 最大公约数(gcd)和最小公倍数(lcm)
求a和b的最大公因数和最小公倍数
123456789101112131415161718192021#include<iostream>using namespace std;//求a和b的最大公因数 int gcd(int a, int b){ ...
树状数组解决什么问题?
给某个位置上的数,加上一个数。(单点修改)
求某一个前缀和。(区间查询)
时间复杂度
O(long n)
步骤及实现给定一个数组{1,5,7,11,4,3,2,6,11,21,15,17,14,13,20,35}。下面将通过树状数组的方式进行查询与修改。
把普通数组进行存储。
存储的位置,从数组的下标”1”开始存,下标”0”不存储元素。
把普通数组转换成树状数组(重点)。
看不懂没关系,先给大家讲解一下,单点修改和区间查询是如何方便的:
树状数组的单点修改,对整体数组修改影响较小。
“前缀和”的单点修改对整体数组修改的影响
假如我们对一个数组的下标3的元素进行加3操作,那么它对应的前缀和数组,下标3之后的所有元素都要进行加3操作,这样操作的时间开销是极大的。如果使用树状数组,对下标3的元素进行加3操作,树状数组的开销就小得多。仅对下标为“3”,”4”,”8 “,“16”的元素进行加3操作。
下面是最终转换的树状数组:
...
C++加载QML的方式QQmlApplicationEngine加载QQmlApplicationEngine是 Qt Quick 应用程序中用于加载和执行 QML 文件的类。它是 Qt 框架的一部分,专门用于处理 QML 语言编写的用户界面和应用程序逻辑。QtCreater在加载QML文件时默认就是采用的这种方式。
下面是QtCreater默认的加载方式。
12345678910QQmlApplicationEngine engine; //创建 QQmlApplicationEngine 对象 const QUrl url(QStringLiteral("qrc:/qmltest/Main.qml")); // QUrl用来存储qml文件的资源路径 QObject::connect( //连接引擎和应用的信号与槽,如果qml文件加载失败,应用程序就作出对应的操作 &engine, &QQmlApplicationEngine::object ...
二分查找(Binary Search)简介二分查找(Binary Search)是一种在有序数组中查找特定元素的搜索算法。它通过反复将数组分成两半,然后在其中一半中继续查找,直到找到目标元素或者确定目标元素不在数组中。
满足条件
数组必须有序。(a n-1 ≤ a n 或 a n-1 ≥ a n)
数组中每个元素必须可以随机访问。
数组的上限和下限必须是已知的。
数组有序是二分查找的基本条件,也是是否可以二分的重要依据,每个元素不一定是int类型,每个元素之间能够比较,数组能够排序就行。
为什么每个元素要能随机访问?
因为在二分过程中,我们要不断更新左边界指针,右边界指针和中间指针,每次更新都是访问数组里面的某个位置的元素。而链表,要想访问某一个元素,必须先要知道它的前继节点,所以在链表中,你要想遍历某个元素,就要不断遍历之前的节点(既然都遍历之前的元素了,顺便查找了不就行了吗?还用什么二分(/_\))。像链表、队列、栈等,这些不能随机访问的数据结构,都不能使用二分查找。
关于上限与下限
在某种特定的情况下,上限与下限是不容易确定的。只要自己设置的边界能够包含正确答案就 ...
驼峰命名法(Camel Case)驼峰命名法(CamelCase)是一种常见的编程中用于命名变量和函数的方法。它的特点如下:
首字母大小写:第一个单词的首字母大写或小写,后续单词的首字母大写。
无空格:单词之间没有空格,直接连接在一起。
无下划线:单词之间不用下划线连接。
驼峰命名法有两种变体:
小驼峰命名法(lowerCamelCase):第一个单词的首字母小写,后续单词的首字母大写。例如:myVariableName。
大驼峰命名法(UpperCamelCase):第一个单词的首字母也大写,后续单词的首字母大写。例如:MyVariableName。
驼峰命名法的优点包括:
简洁性:没有空格和下划线,使得代码看起来更加紧凑。
可读性:单词的分隔通过大小写变化来实现,提高了代码的可读性。
一致性:在许多编程语言和项目中,驼峰命名法被广泛使用,有助于保持代码风格的一致性。
C++文件规范关于头文件与源文件的命名
文件名与类名要保持一致:如果头文件中定义了一个类,那么文件名应该与类名一致。
文件名使用小写字母:通常建议使用小写字母来命名文件,因为大多数操作系统在文件系统中是大小写敏感的。
避免使用数字和特殊字符:文件名中应避免使用数字和特殊字符,因为它们可能会在不同的操作系统和环境中引起问题。
关于头文件与源文件后缀
头文件:C++的头文件有两种命名方式一种是.hpp ,另一种是.h 。
.h:C语言和C++语言中传统的头文件扩展名,它源自C语言。在C++中,.h扩展名仍然被广泛使用,尤其是在一些旧的代码库和跨平台的库中。
.hpp:C++特有的头文件扩展名,它被用来明确表示这是一个C++头文件,而不是C语言的头文件。.hpp扩展名的使用也是为了强调C++的面向对象特性和C++特有的语法。
源文件:C++的源文件只有.cpp 这一种命名方式。
头文件是用h还是hpp呢?
在实际使用中,.h和 .hpp 没有技术上的区别 ,它们都表示头文件。选择使用哪一个主要取决于个人或团队的编码风格、项目规范以及历史习惯。有些项目可能统一使用.hpp而有些项目则可能混 ...
CMake简介CMake是一个跨平台的自动化构建系统,它使用配置文件(称为CMakeLists.txt),这些文件定义了如何构建、测试和安装软件。CMake的主要目标是提供一种编写构建过程的方法,这种方法可以跨不同的编译器和操作系统工作,从而使得构建软件的过程更加一致和可移植。
以下是CMake的一些关键特性和用途:
跨平台支持:CMake可以生成多种编译器和平台的构建文件,如Unix的Makefiles、Windows的Visual Studio工程文件、Xcode项目文件等。
模块化:CMake使用模块化的设计,允许开发者重用代码和设置。
依赖管理:CMake可以自动处理库依赖关系,包括自动查找和链接第三方库。
测试框架:CMake内置了CTest,这是一个测试驱动程序,可以轻松地集成到构建过程中。
安装规则:CMake允许开发者定义安装规则,使得软件可以被安装到系统上。
变量和条件逻辑:CMake提供了丰富的变量和条件逻辑,使得构建过程可以根据不同的配置和平台进行调整。
生成自定义构建目标:CMake允许开发者定义自定义的构建目标,比如生成文档、打包软件等。
命令 ...