蓝桥杯备赛学习笔记:高频考点与真题预测(C++/Java/python版)
2025蓝桥杯备赛学习笔记
——高频考点与真题预测
一、考察趋势分析
通过对第13-15届蓝桥杯真题的分析,可以发现题目主要围绕基础算法、数据结构、数学问题、字符串处理、编程语言基础展开,且近年逐渐增加动态规划、图论、贪心算法等较难题目。
1. 基础算法(必考)
- 排序与查找
- 快速排序、归并排序(手写实现)
- 二分查找(变种题,如旋转数组查找)
- 搜索算法
- DFS(回溯、排列组合)
- BFS(最短路径、层序遍历)
- 贪心算法
- 区间调度、背包问题(部分背包)
- 动态规划(重点)
- 背包问题(01背包、完全背包)
- 最长公共子序列(LCS)
- 股票买卖问题(变种DP)
2. 数据结构(必考)
- 线性表
- 数组(前缀和、差分数组)
- 链表(反转、快慢指针)
- 树与二叉树
- 二叉搜索树(BST)的插入、删除
- 平衡二叉树(AVL、红黑树概念)
- 图论
- 最短路径(Dijkstra、Floyd)
- 最小生成树(Prim、Kruskal)
- 栈与队列
- 单调栈(接雨水、柱状图最大矩形)
- 队列(BFS、滑动窗口)
3. 数学问题(常考)
- 数论
- 素数筛(埃氏筛、欧拉筛)
- 最大公约数(GCD)、最小公倍数(LCM)
- 组合数学
- 排列组合(卡特兰数、容斥原理)
- 位运算
- 异或性质、状态压缩(子集枚举)
4. 字符串处理(常考)
- 字符串匹配
- KMP算法(模式匹配)
- 字典树(Trie)
- 字符串操作
- 反转、子串查找、回文判断
5. 编程语言基础(C++/Java)
- 语法基础
- 变量、循环、递归
- 文件操作
- 读写文件(蓝桥杯常考)
- 输入输出优化
- C++
scanf/printfvscin/cout(关闭同步流)
- C++
二、预测题目与解题思路
1. 算法类
题目1:最大子数组和(动态规划)
-
描述:给定一个整数数组
nums,找到和最大的连续子数组。 -
解题思路:
-
C++:
#include <vector> #include <algorithm> using namespace std;int maxSubArray(vector<int>& nums) {int n = nums.size();vector<int> dp(n);dp[0] = nums[0];int res = dp[0];for (int i = 1; i < n; i++) {dp[i] = max(nums[i], dp[i-1] + nums[i]);res = max(res, dp[i]);}return res; } -
Java:
public int maxSubArray(int[] nums) {int n = nums.length;int[] dp = new int[n];dp[0] = nums[0];int res = dp[0];for (int i = 1; i < n; i++) {dp[i] = Math.max(nums[i], dp[i-1] + nums[i]);res = Math.max(res, dp[i]);}return res; } -
Python:
def maxSubArray(nums):dp = [0] * len(nums)dp[0] = nums[0]for i in range(1, len(nums)):dp[i] = max(nums[i], dp[i-1] + nums[i])return max(dp) -
变种:如果数组是环形的(首尾相连),如何计算?
题目2:最短路径(Dijkstra算法)
-
描述:给定带权图,求从
start到end的最短路径。 -
解题思路:
-
C++:
#include <vector> #include <queue> #include <climits> using namespace std;vector<int> dijkstra(vector<vector<pair<int, int>>>& graph, int start) {int n = graph.size();vector<int> dist(n, INT_MAX);dist[start] = 0;priority_queue<pair<int, int>, vector<pair<int, int>>, greater<>> pq;pq.push({0, start});while (!pq.empty()) {auto [current_dist, u] = pq.top();pq.pop();if (current_dist > dist[u]) continue;for (auto [v, w] : graph[u]) {if (dist[v] > dist[u] + w) {dist[v] = dist[u] + w;pq.push({dist[v], v});}}}return dist; } -
Java:
import java.util.*;public int[] dijkstra(List<List<int[]>> graph, int start) {int n = graph.size();int[] dist = new int[n];Arrays.fill(dist, Integer.MAX_VALUE);dist[start] = 0;PriorityQueue<int[]> pq = new PriorityQueue<>((a, b) -> a[0] - b[0]);pq.offer(new int[]{0, start});while (!pq.isEmpty()) {int[] curr = pq.poll();int u = curr[1], currentDist = curr[0];if (currentDist > dist[u]) continue;for (int[] edge : graph.get(u)) {int v = edge[0], w = edge[1];if (dist[v] > dist[u] + w) {dist[v] = dist[u] + w;pq.offer(new int[]{dist[v], v});}}}return dist; } -
Python:
import heapq def dijkstra(graph, start):heap = [(0, start)]dist = {node: float('inf') for node in graph}dist[start] = 0while heap:current_dist, u = heapq.heappop(heap)if current_dist > dist[u]:continuefor v, w in graph[u].items():if dist[v] > dist[u] + w:dist[v] = dist[u] + wheapq.heappush(heap, (dist[v], v))return dist
2. 数据结构类
题目3:二叉搜索树的插入与删除
-
描述:实现BST的插入和删除操作。
-
解题思路:
-
C++:
struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} };TreeNode* insert(TreeNode* root, int val) {if (!root) return new TreeNode(val);if (val < root->val) root->left = insert(root->left, val);else root->right = insert(root->right, val);return root; } -
Java:
class TreeNode {int val;TreeNode left, right;TreeNode(int x) { val = x; } }public TreeNode insert(TreeNode root, int val) {if (root == null) return new TreeNode(val);if (val < root.val) root.left = insert(root.left, val);else root.right = insert(root.right, val);return root; } -
`Python:
class TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = rightdef insert(root, val):if not root:return TreeNode(val)if val < root.val:root.left = insert(root.left, val)else:root.right = insert(root.right, val)return root
题目4:最长回文子串(动态规划/中心扩展)
-
描述:给定字符串
s,返回最长回文子串。 -
解题思路:
-
C++:
string longestPalindrome(string s) {int n = s.size();int start = 0, maxLen = 1;auto expand = [&](int l, int r) {while (l >= 0 && r < n && s[l] == s[r]) {if (r - l + 1 > maxLen) {maxLen = r - l + 1;start = l;}l--; r++;}};for (int i = 0; i < n; i++) {expand(i, i); // 奇数长度expand(i, i+1); // 偶数长度}return s.substr(start, maxLen); } -
Java:
public String longestPalindrome(String s) {int n = s.length();int start = 0, maxLen = 1;for (int i = 0; i < n; i++) {expand(s, i, i); // 奇数长度expand(s, i, i+1); // 偶数长度}return s.substring(start, start + maxLen); }private void expand(String s, int l, int r) {while (l >= 0 && r < s.length() && s.charAt(l) == s.charAt(r)) {if (r - l + 1 > maxLen) {maxLen = r - l + 1;start = l;}l--; r++;} } -
Python:
def longestPalindrome(s):n = len(s)dp = [[False] * n for _ in range(n)]res = ""for i in range(n-1, -1, -1):for j in range(i, n):if s[i] == s[j] and (j - i <= 2 or dp[i+1][j-1]):dp[i][j] = Trueif j - i + 1 > len(res):res = s[i:j+1]return res
3. 数学问题类
题目5:数字1的个数(数位DP)
-
描述:计算
1~n中数字1出现的次数。 -
解题思路:
-
C++:
int countDigitOne(int n) {int count = 0;for (long i = 1; i <= n; i *= 10) {long divider = i * 10;count += (n / divider) * i + min(max(n % divider - i + 1, 0L), i);}return count; } -
Java:
public int countDigitOne(int n) {int count = 0;for (long i = 1; i <= n; i *= 10) {long divider = i * 10;count += (n / divider) * i + Math.min(Math.max(n % divider - i + 1, 0), i);}return count; } -
Python:
def countDigitOne(n):count = 0i = 1while i <= n:divider = i * 10count += (n // divider) * i + min(max(n % divider - i + 1, 0), i)i *= 10return count
题目6:阶乘计算(大数处理)
- 描述:计算
n!(n可能很大,如1000!)。 - 解题思路:
def factorial(n):res = 1for i in range(1, n+1):res *= ireturn res- 优化:如果
n很大,使用math.factorial或高精度计算(如Python默认支持大整数)。
- 优化:如果
4. 字符串处理类
题目7:判断回文串(双指针)
-
描述:判断字符串
s是否是回文。 -
解题思路:
-
C++:
bool isPalindrome(string s) {int left = 0, right = s.size() - 1;while (left < right) {if (s[left++] != s[right--]) return false;}return true; } -
Java:
public boolean isPalindrome(String s) {int left = 0, right = s.length() - 1;while (left < right) {if (s.charAt(left++) != s.charAt(right--)) return false;}return true; } -
Python:
def isPalindrome(s):left, right = 0, len(s)-1while left < right:if s[left] != s[right]:return Falseleft += 1right -= 1return True
题目8:子序列判断(双指针)
- 描述:判断
s是否是t的子序列。 - 解题思路:
def isSubsequence(s, t):i, j = 0, 0while i < len(s) and j < len(t):if s[i] == t[j]:i += 1j += 1return i == len(s)
三、备考策略
-
刷题优先级
- 必刷:动态规划(背包、LCS)、DFS/BFS、Dijkstra、二分查找。
- 次重点:数论(素数筛、GCD)、字符串(KMP、回文)。
- 保底题:文件操作、递归、基础语法。
-
时间分配建议
- 填空题(5题):10分钟/题(数学、模拟题为主)。
- 编程题(5题):前2题暴力解法(30分钟),后3题优化(60分钟)。
-
调试技巧
- 对拍:用暴力算法验证优化算法的正确性。
- 边界测试:
n=0、n=1e5等极端情况。
四、总结
蓝桥杯题目题型固定但变种多,重点掌握:
✅ 动态规划(背包、LCS)
✅ 图论(Dijkstra、BFS/DFS)
✅ 数学(数论、组合数学)
✅ 字符串(KMP、回文)
✅ 数据结构(BST、单调栈)
建议:
- 整理模板代码(如快速幂、并查集)。
- 模拟考试环境(限时、无IDE调试)。
祝大家备赛顺利,冲击省一! 🚀
相关文章:
蓝桥杯备赛学习笔记:高频考点与真题预测(C++/Java/python版)
2025蓝桥杯备赛学习笔记 ——高频考点与真题预测 一、考察趋势分析 通过对第13-15届蓝桥杯真题的分析,可以发现题目主要围绕基础算法、数据结构、数学问题、字符串处理、编程语言基础展开,且近年逐渐增加动态规划、图论、贪心算法等较难题目。 1. 基…...
【BFT帝国】20250409更新PBFT总结
2411 2411 2411 Zhang G R, Pan F, Mao Y H, et al. Reaching Consensus in the Byzantine Empire: A Comprehensive Review of BFT Consensus Algorithms[J]. ACM COMPUTING SURVEYS, 2024,56(5).出版时间: MAY 2024 索引时间(可被引用): 240412 被引:…...
Linux-CentOS-7—— 配置静态IP地址
文章目录 CentOS-7——配置静态IP地址VMware workstation的三种网络模式配置静态IP地址1. 编辑虚拟网络2. 确定网络接口名称3. 切换到网卡所在的目录4. 编辑网卡配置文件5. 查看网卡文件信息6. 重启网络服务7. 测试能否通网8. 远程虚拟主机(可选) 其他补…...
Jupyter Lab 无法启动 Kernel 问题排查与解决总结
📄 Jupyter Lab 无法启动 Kernel 问题排查与解决总结 一、问题概述 🚨 现象描述: 用户通过浏览器访问远程服务器的 Jupyter Lab 页面(http://xx.xx.xx.xx:8891/lab)后,.ipynb 文件可以打开,但无…...
算法训练之位运算
♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…...
linux入门三:Linux 编辑器
一、轻量级编辑器:快速上手的首选 1.1 Leafpad:极简主义的轻量之选 核心特点 轻量快速:体积小、启动快,资源占用极低,适合低配设备或快速编辑简单文件。 无复杂功能:仅支持基础文本编辑,界面…...
C++设计模式+异常处理
#include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h> #include <sstream> #include <vector> #include <memory> #include <stdexcept> // 包含异常类using namespace std;// 该作业要求各位写一…...
HttpServletRequest是什么
HttpServletRequest 是 Java Servlet API 中的一个接口,表示 HTTP 请求对象。它封装了客户端(如浏览器)发送到服务器的请求信息,并提供了访问这些信息的方法。 1. 基本概念 作用: HttpServletRequest 提供了一种机制&…...
checkra1n越狱出现的USB error -10问题解决
使用checkra1n进行越狱是出现: 解决办法(使用命令行进行越狱): 1. cd /Applications/checkra1n.app/Contents/MacOS 2. ./checkra1n -cv 3. 先进入恢复模式 a .可使用爱思助手 b. 或者长按home,出现关机的滑条,同时按住home和电源键&#…...
golang-defer延迟机制
defer延迟机制 defer是什么 defer是go中一种延迟调用机制。 执行时机 defer后面的函数只有在当前函数执行完毕后才能执行。 执行顺序 将延迟的语句按defer的逆序进行执行,也就是说先被defer的语句最后被执行,最后被defer的语句,最先被执…...
【小沐学Web3D】three.js 加载三维模型(Angular)
文章目录 1、简介1.1 three.js1.2 angular.js 2、three.js Angular.js结语 1、简介 1.1 three.js Three.js 是一款 webGL(3D绘图标准)引擎,可以运行于所有支持 webGL 的浏览器。Three.js 封装了 webGL 底层的 API ,为我们提供了…...
一种替代DOORS在WORD中进行需求管理的方法 (二)
一、前景 参考: 一种替代DOORS在WORD中进行需求管理的方法(基于WORD插件的应用)_doors aspice-CSDN博客 二、界面和资源 WORD2013/WORD2016 插件 【已使用该工具通过第三方功能安全产品认证】: 1、 核心功能 1、需求编号和跟…...
一个基于ragflow的工业文档智能解析和问答系统
工业复杂文档解析系统 一个基于ragflow的工业文档智能解析和问答系统,支持多种文档格式的解析、知识库管理和智能问答功能。 系统功能 1. 文档管理 支持多种格式文档上传(PDF、Word、Excel、PPT、图片等)文档自动解析和分块处理实时处理进度显示文档解析结果预览批量文档…...
23种设计模式-行为型模式-访问者
文章目录 简介场景解决完整代码核心实现 总结 简介 访问者是一种行为设计模式,它能把算法跟他所作用的对象隔离开来。 场景 假如你的团队开发了一款能够使用图像里地理信息的应用程序。图像中的每个节点既能代表复杂实体(例如一座城市)&am…...
WebView2最低支持.NET frame4.5,win7系统
WebView2最低支持.NET frame什么版本 WebView2 对 .NET Framework 的最低版本要求 基础支持范围 WebView2 官方支持的 .NET Framework 最低版本为 4.5,同时兼容 .NET Core 3.0 及以上版本18。对于 WPF、WinForms 等桌面应用开发,需确…...
WHAT - React 组件的 props.children 属性
目录 一、什么是 children二、基本用法三、类型定义(TypeScript)四、一些高级用法1. 条件渲染 children2. 多个 children 插槽(命名插槽) 五、children 的优势总结 在 React 中,children 是一个非常重要且特殊的 内置属…...
组播网络构建:IGMP、PIM 原理及应用实践
IP组播基础 组播基本架构 组播IP地址 一个组播IP地址并不是表示具体的某台主机,而是一组主机的集合,主机声明加入某组播组即标识自己需要接收目的地址为该组播地址的数据IP组播常见模型分为ASM模型和SSM模型ASM:成员接收任意源组播数据&…...
建筑兔零基础自学记录69|爬虫Requests-2
Requests库初步尝试 #导入requests库 import requests #requests.get读取百度网页 rrequests.get(http://www.baidu.com) #输出读取网页状态 print(r.status_code) #输出网页源代码 print(r.text) HTTP 状态码是三位数字,用于表示 HTTP 请求的结果。常见的状态码有…...
NVIDIA PhysX 和 Flow 现已完全开源
NVIDIA PhysX SDK 在 3-Clause BSD 许可下开源已有六年半了,但其中并非所有内容都是开源的。直到最近,随着 GPU 模拟内核源代码在 GitHub 上的发布,这种情况才有所改变。以下是 NVIDIA 分享的消息,以及 Flow SDK 着色器实现的发布…...
QML面试笔记--UI设计篇01常用控件分类
1. QML常用控件深度解析:从入门到实战2. 控件分类全景图3. 核心控件详解 3.1. 布局控件(构建界面骨架) 3.1.1. ▶ ColumnLayout 3.2. 交互控件 3.2.1. ▶ 智能搜索框(组合控件) 3.3. 数据可视化控件 3.3.1. ▶ 动态仪表…...
电脑DNS出错无法打开网页
目录 解决步骤 打开“控制面板”--》“查看网络状态和任务” 打开“更改适配器设置” 对WLAN右键,打开属性 打开“使用下面的DNS服务器地址”--》高级 添加“114.114.114.114”,点击确定 今天晚上突然网页打不开了,一开始我以为是网络的…...
[Redis]redis-windows下载安装与使用
本篇记录windows redis下载安装与使用。 下载 官网下载方式(没windows版) https://redis.io/downloads/#stack 可以选择下载社区版Redis CE与增强版Redis Stack。 两者都不支持直接运行在windows上,需要Docker环境。 You can install Redis CE locally on your …...
Python-Django+vue宠物服务管理系统功能说明
❥(^_-) 上千个精美定制模板,各类成品Java、Python、PHP、Android毕设项目,欢迎咨询。 ❥(^_-) 程序开发、技术解答、代码讲解、文档,💖文末获取源码+数据库+文档💖 💖软件下载 | 实战案例 💖文章底部二维码,可以联系获取软件下载链接,及项目演示视频。 本项目…...
极氪汽车云原生架构落地实践
云原生架构落地实践的背景 随着极氪数字业务的飞速发展,背后的 IT 技术也在不断更新迭代。极氪极为重视客户对服务的体验,并将系统稳定性、业务功能的迭代效率、问题的快速定位和解决视为构建核心竞争力的基石。 为快速响应用户的需求,例如…...
2025年AI开发学习路线
目录 一、基础阶段(2-3个月) 1. 数学与编程基础 2. 机器学习入门 二、核心技能(3-4个月) 1. 深度学习与框架 2. 大模型开发(重点) 三、进阶方向(3-6个月) 1. 多模态与智能体…...
网络出故障时,四大表(MAC表、ARP表、路由表、转发表)怎么查?看看这套排查顺序
网络出故障时,四大表 (MAC表、ARP表、路由表、转发表) 怎么查 说正题之前,我们先来假设一个场景: 场景假设: 一台华为设备突然上不了网,或者访问某个 IP 不通。 你会怎么排查? 别慌,兄弟&a…...
数据结构与算法-图论-复习1(单源最短路,全源最短路,最小生成树)
1. 单源最短路 单一边权 BFS 原理:由于边权为单一值,可使用广度优先搜索(BFS)来求解最短路。BFS 会逐层扩展节点,由于边权相同,第一次到达某个节点时的路径长度就是最短路径长度。 用法:适用…...
oracle 动态性能视图
Oracle 数据库中的 V$SQLAREA 是一个动态性能视图(Dynamic Performance View),用于记录共享池(Shared Pool)中所有 SQL 语句的统计信息。每个 SQL 语句在共享池中存储为一个游标(Cursor)&#x…...
Vue3+Vite+TypeScript+Element Plus开发-10.多用户动态加载菜单
系列文档目录 Vue3ViteTypeScript安装 Element Plus安装与配置 主页设计与router配置 静态菜单设计 Pinia引入 Header响应式菜单缩展 Mockjs引用与Axios封装 登录设计 登录成功跳转主页 多用户动态加载菜单 Pinia持久化 动态路由-配置 文章目录 目录 系列文档目…...
前端用户列表与后端分页协同设计
分页实现方案 在现代Web应用中,用户列表展示与分页是一个常见的功能需求。前端与后端通过API协同工作,使用PageHelper等工具实现高效分页。 例如: 后端实现 (使用PageHelper) public PageResult DishPage(DishPageQueryDTO dishPageQuery…...
