蓝桥杯知识点——day2

1.使用sort进行升序以及降序的排序

cpp 复制代码
//使用sort进行数组的升序以及降序排列 
#include<bits/stdc++.h>
using namespace std;

int main(){
	int n;
	cin>>n;
	vector<int> num(n);
	for(int i = 0; i < n; i++){
		cin>>num[i];
	}
	sort(num.begin(), num.end());
	for(int i = 0; i < n; i++){
		cout<< num[i] <<" "; 
	}
	cout<< endl;
	sort(num.begin(), num.end(), greater<int>());
	for(int i = 0;i < n; i++)
	{
		cout<< num[i] << " "; 
	}
	cout<< endl;
	return 0;	
}

2. 斐波那契数列fn % 1e+7的结果

使用循环表示斐波那契数列,不使用递归

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
int f[100005];
int main(){
	int n;
	cin>> n;
	f[1] = 1;
	f[2] = 1;
	for(int i = 3; i <= n; i++){
		f[i] = (f[i-1] + f[i-2]) % mod;
	}
	cout<< f[n];
	return 0;
}

3.输出矩阵的顺时针旋转90度

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

// 定义全局二维数组,大小205x205,满足题目中n/m≤200的常见范围
int num[205][205];

int main(){
    // n:原始数组的行数,m:原始数组的列数
    int n, m;
    cin >> n >> m;

    // 第一步:读取n行m列的原始二维数组
    // 原错误1:for循环条件少写分号 → i = 0; i < n
    // 原错误2:内层循环条件写错 → j < m 而非 i < m
    for(int i = 0; i < n; i++) {          // 遍历每一行(i为行下标)
        for(int j = 0; j < m; j++){       // 遍历每一列(j为列下标)
            cin >> num[i][j];             // 输入第i行第j列的元素
        }
    }

    // 第二步:将数组顺时针旋转90度并输出
    // 旋转逻辑:原始n行m列 → 旋转后m行n列
    // 旋转后第i列(原列)变为第i行,原始行逆序后作为列
    for(int i = 0; i < m ; i++){          // 遍历原始数组的列(旋转后成为行)
        for(int j = 0; j < n; j++){       // 遍历原始数组的行(旋转后成为列)
            // 核心映射关系:num[原始行][原始列] = num[n-1-j][i]
            // n-1-j:将原始行逆序(比如n=3时,j=0→2,j=1→1,j=2→0)
            cout << num[n - 1 - j][i];
            // 控制输出格式:非最后一列加空格,最后一列换行
            if (j != n - 1) {
                cout << " ";
            } else {
                cout << endl;
            }
        }
    }
    return 0;
}

1.枚举(1-3)、2.排序(冒泡、选择、插入、归并、快速、桶、堆、基数)、3.搜索(DFS、BFS、剪枝、双向BFS、记忆化搜索、迭代式加深搜索、启发式搜索)(1-5)、4.贪心(1-5)、5.模拟(1-3)、6.二分(2-5)、7.DP(一维3-5、背包DP、状压DP、数位DP、DP的常见优化)、8.高精度(1-5)、9.数据结构(栈、队列、链表、ST表、堆、树状数组、线段树、Trie树、并查集、平衡树)(2-5)、10.数学(数论3-5、排列组合、二项式定理、容斥定理、矩阵运算、高斯消元)、11. 字符串(哈希、kmp、马拉车)、12.图论(欧拉回路、最小生成树、单元最短路及差分约束系统、拓扑序列、二分图匹配、图的连通性问题【割点、桥、强联通分量】)、13.计算几何(概率论以及博弈论)

一、数组和前缀和

(1)暴力

cpp 复制代码
#include<iostream>
using namespace std;
int main(){
	int n;
	cin>> n;
	int num[n];
	for(int i = 0; i < n; i++){
		cin>>num[i];
	}
	long long sum = 0;
	for(int i = 0; i < n; i++){
		for(int j = i + 1; j < n; j++ ){
			sum += (long long)num[i] * num[j];
		}
	}
	cout<<sum<<endl;
	return 0;
}

(后缀和递推)

cpp 复制代码
#include<iostream>
#include<vector>
using namespace std;
int main(){
	int n;
	cin>> n;
	vector<int> num(n);
	for(int i = 0; i < n; i++){
		cin>>num[i];	
	}
	long long sum = 0;
	vector<long long>l_sum (n,0);
	l_sum[n-1] = num[n-1];
	for(int i = n-2; i >= 0; i--){
		l_sum[i] = num[i] + l_sum[i + 1]; 
	}
	for(int i = 0;i < n - 1; i++){
		sum += num[i] * l_sum[i+1];
	}
	cout<<sum<<endl;
	return 0;
} 

前缀和:快速进行计算任意区间l,r的和

cpp 复制代码
sum(l,r) = f_sum[r] - f_sum[l - 1]; 

Leecode(303、209、560、304、918)

二、二叉树


1.二叉树的遍历

前序、

cpp 复制代码
#include<iostream>
#include<vector>
#include<queue>
#include<stack>
using namespace std;

struct TreeNode{
		int val;
		TreeNode *left;
		TreeNode *right;
		TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
	};
	
//1.前序
void preOrder(TreeNode *root,vector<int> &res){
	if(root== nullptr) return ;
	res.push_back(root->val);
	preOrder(root->left,res);
	preOrder(root->right,res);
}

后序、

cpp 复制代码
//2.后序
void postOrder(TreeNode *root,vector<int> &res){
	if(root == nullptr ) return ;
	postOrder(root->left,res);
	postOrder(root->right,res);
	res.push_back(root->val);
}

中序、

cpp 复制代码
//3.中序
void inOrder(TreeNode *root,vector<int> &res){
	if(root == nullptr ) return ;
	postOrder(root->left,res);
	res.push_back(root->val);
	postOrder(root->right,res);
	
}

层次

cpp 复制代码
//4.层次(队列实现)
void levelOrder(TreeNode *root ,vector<int> &res){
	if(root == nullptr)  return ;
	queue<TreeNode*> q;//辅助队列 
	q.push(root);//根节点入队 
	while(!q.empty()){
		int n = q.size();//记录当前的层节点数 
		for(int i = 0 ;i < n; i++){
			TreeNode *node = q.front();
			q.pop();
			res.push_back(node->val);
			//左子节点入队 
			if(node->left != nullptr) q.push(node->left);
			//右子节点入队 
			if(node->right != nullptr) q.push(node->right);
		}
	} 
}

利用二叉树的性质求层数解决问题

cpp 复制代码
#include<iostream>
#include<vector>
#include<cmath>

using namespace std;
int main(){
	int n;
	cin>>n;
	vector<int> a(n);
	for(int i = 0; i < n; i++){
		cin>>a[i];
	}
	//计算树的深度 
	int depth = log2(n) + 1;
	//初始化每一层的权值和 
	vector<long long> level_sum(depth + 1,0);
	//计算每一层的权值和 
	for(int i = 0; i< n; i++){
		int level = log2(i + 1) + 1;
		level_sum[level] += a[i]; 
	}
	//找到最大的权值和所在的层 
	long long max_sum = -1;
	int res = 1;
	for(int i = 1; i<=depth;i++){
		if(level_sum[i]>max_sum) {
			max_sum = level_sum[i];
			res = i;
		}
	}
	cout<<res<<endl;
	return 0;
}
 

常用库的概述

iostream:输入输出

vector:动态数组

algorithm:常用算法

string:字符串的相关处理

eg


相关推荐
先吃饱再说16 小时前
判断回文字符串,从一行代码到双指针优化
算法
黄敬峰19 小时前
深入理解算法核心:从递归思想、数组扁平化到快速排序
算法
得物技术20 小时前
从狂野代码到按目标生产:得物推荐 AI Harness 的工程化实践|AICon 演讲整理
人工智能·算法·架构
AI小老六1 天前
SkillOpt 架构拆解:把 Skill 文本当参数,用执行轨迹训练 Agent
后端·算法·ai编程
胡萝卜术1 天前
从“分数打架”到“排名投票”:为什么你的ChatBI必须用RRF?
算法·设计模式·面试
Asize1 天前
初识DFS 与 BFS:递归、队列与图遍历
算法
罗西的思考2 天前
机器人 / 强化学习】HIL-SERL:人类在环驱动的具身智能进化框架
人工智能·算法·机器学习
CSharp精选营2 天前
关系型 vs 非关系型:从原理到选型,一文搞定数据库核心分类
数据结构·nosql·关系型数据库·非关系型数据库·技术选型
美团技术团队2 天前
LongCat 开源 VitaBench 2.0:长期动态智能体基准新标杆
人工智能·算法