当前位置: 首页 > news >正文

赵义弘-----补题报告

总述:D系列加强(J组冲奖)的一到四节课的知识概括以及错点分析和代码实现

一.知识梳理

                                1.排序(冒泡排序,选择排序,插入排序)

                                                排序大家都不陌生,介绍还是要介绍的

                                                1.冒泡排序(稳定的排序)

                                                        时间复杂度通常为O(n^2)

                                                        代码实现如下

for(int i=1; i<=n-1; i++){//控制比较的轮数for(int j=1; j<=n-i; j++){//控制的是本轮比较的次数if(a[j] < a[j+1]){//比较元素swap(a[j],a[j+1]);//交换这两个元素 }  }
}

作用
1、将n个元素从小到大或从大到小排序
2、逆序对的个数(需要交换的次数)
过程
它的工作原理是每次检查相邻两个元素,如果前面的元素与后面的元素满足给定的排序条件,就将相邻两个元素交换。当没有相邻的元素需要交换时,排序就完成了。
经过 次扫描后,数列的末尾 项必然是最大的 项,因此冒泡排序最多需要扫描 遍数组就能完成排序。
性质
冒泡排序是一种稳定的排序算法               

以上是对冒泡排序更为详细的介绍,可供参考

2.选择排序(不稳定的排序)

时间复杂度与冒泡一致为O(n^2)                 

代码实现如下

for(int i = 1; i <= n - 1; i++){//确定范围起点 a[i]int index = i;//初始化a[i]~a[n]范围中的最小值下标 for(int j = i + 1; j <= n; j++){//范围剩余元素if(a[j] < a[index]){//有更小的index = j;//更新最小值下标 }  } if(i!=index){swap(a[i],a[index]);//确保a[i]存的值最小 }
}

作用
将 个元素从小到大或从大到小排序。
过程
它的工作原理是:从数组 的连续的范围 里,每次找出最值,对整个 数组来说是第小(大)的元素,然后将这个元素与第 个位置上的元素交换。
效果是:让 中 是最值,然后下一个范围变成 重复上述步骤,让 继续存剩余元素中的最值。每次求的是最大值,整体就会从大到小;每次求的是最小值,整体就会从小到大。
性质
选择排序是一种不稳定的排序算法。

以上是对选择排序更为详细的介绍,可供参考

3.插入排序(稳定的排序)

时间复杂度最优解为O(n),不优解为O(n^2)

代码实现如下

for(int i = 2; i <= n; i++){//「未排序」部分int j , key = a[i];//选一个插入到「已排序」部分 for(j = i - 1; j >= 1 && key < a[j]; j--){//遍历「已排序」部分a[j]a[j+1] = a[j];//把a[j]向后移动 } a[j+1] = key;//合适位置放key,插入成功
}

作用
将 个元素从小到大或从大到小排序。
过程
它的工作原理是:将待排列元素划分为「已排序」和「未排序」两部分,每次从「未排序的」元素中拿一个插入到「已排序的」元素中的正确位置。
初始的「已排序」部分,只有一个元素,其余都是「未排序」部分。每次的独立操作都是把一个元素插入到有序数组中,使得有序。
性质
插入排序是一种稳定的排序算法。

以上是对插入排序更为详细的介绍,可供参考

蒟蒻我没有被排序难倒,所以就不为大家展示错点了

2.STL(栈,队列,map,vector,set,priority_queue)

先从栈说起吧

一个容器,特性为先进后出

                        ​         

就像这个弹夹一样,你压进去的子弹最后才打出来

以下为栈的几个常用操作

1. 定义栈

//数组模拟
int sta[100]; //定义栈元素都是int类型
int top = -1;//top表示栈顶元素下标。一开始0下标没放元素,所以再后退一个指向。
//STL
stack<int> sta;//定义栈元素都是int类型

2. 入栈x元素      ​​​​​​​       

//数组模拟
top++;//指针先移动到下一个位置
sta[top] = x;
//STL
sta.push(x);

 ​​​​​​3. 判断栈是否为空    ​​​​​​​        ​​​​​​​  

//数组模拟
top == -1 //栈空
//STL
sta.empty() == 1//栈空

   4. 输出栈顶元素

//数组模拟
cout << sta[top]; //top指向栈顶元素
//STL
cout << sta.top();

   ​​​​​​​5. 出栈

//数组模拟
top--; //栈指针往后移动
//STL
sta.pop();

  ------------------------------------------------------这里是分割线------------------------------------------------------

知识点就先梳理到这(后续补上,蒟蒻我偷点小懒)

二.错点分析

我的绝大多数错误都出在了STL这一块

先看看第一道题

最近的一对
题目描述
给定一个长度为n的数组a。
假设对于a数组的下标 i,j,找出满足 1≤i<j≤n1≤i<j≤n ,且 ai==aja​i​​==a​j​​ ,且 j−ij−i 最小。输出aia​i​​
如果有多个答案,输出最小的 i 对应的aia​i​​ 。
输入描述
第一行:输入一个正整数n,表述如题。
第二行:输入n个整数,表示a数组。
输出描述
输出符合条件的最小的aia​i​​,如果没有答案,则输出No
输入样例
  1. 10
  2. 19 13 11 19 11 5 6 3 4 3
输出样例
  1. 11

   错误代码如下

时间过的有点长错因忘了是啥了,蒟蒻对不起大家,下面直接呈现正确代码了

任意进制转换

一道比较常见的题,在luogu上也能搜到(p1143)

这道题错因主要是没有判断字符是否为0

代码如下

#include<bits/stdc++.h>
#define endl '\n'
typedef long long ll;
const int N=1e6+5;
ll n,t,m,x,a[N],d,ans,cnt;
using namespace std;
int main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);string s;cin>>n>>s;int ten=0;for(int i=0;i<s.size();i++){ten=ten*n;if(isdigit(s[i])) ten=ten+s[i]-'0';else ten=ten+s[i]-'A'+10;}cin>>n;stack<int> st;if(ten==0) cout<<0;while(ten){st.push(ten%n);ten=ten/n;}while(!st.empty()){if(st.top()<10) cout<<st.top();else cout<<char(st.top()+'A'-10);st.pop();}return 0;
} 

代码是肯定AC了

三.代码中所使用的特殊语句

1.

   ​​​​​​​        ​​​​​​​       

#define endl '\n'
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);

 ​​​​​​​ 在输入输出的数据过大时我们可以关闭同步,代码如上

2.       一些is开头的函数

isalpha()用来判断一个字符是否为字母
isalnum()用来判断一个字符是否为数字或者字母,也就是说判断一个字符是否属于a~ z||A~ Z||0~9
isdigit() 用来检测一个字符是否是十进制数字0-9
islower()用来判断一个字符是否为小写字母,也就是是否属于a~z
isupper()和islower相反,用来判断一个字符是否为大写字母

行了,差不多就这些了

蒟蒻请大家帮个忙,如果有luogu号的话可以去骚扰一下LN老师

http://www.dtcms.com/a/306675.html

相关文章:

  • 【python】Python爬虫入门教程:使用requests库
  • 【git】在 GitLab 上如何把 A 分支(如 feature/xxx)合并到 B 分支(如 trunk)
  • Scala实现常用排序算法
  • 深入理解 Kotlin Flow:异步数据流处理的艺术
  • MidJourney精选图集与提示词生成器:AI创意灵感与高效提示词工具
  • composer 常用命令
  • 高防CDN与高防IP的选择
  • docker可视化管理工具lazydocker
  • 【百卷编程】Go语言大厂高级面试题集
  • 3GPP TS 38.331 V18.6.0 (2025-06)中文版
  • 工业5G路由器赋能高速公路实时监控
  • 【问题未解决-寻求帮助】VS Code 中使用 Conda 环境,运行 Python 后 PowerShell 终端输出内容立即消失
  • 《Java 程序设计》第 12 章 - 异常处理
  • T113-i Linux系统完整构建指南:从SDK开箱到内核镜像量产烧录全流程
  • 2025年湖北中级注册安全工程师报考那些事
  • docker 用于将镜像打包为 tar 文件
  • 【MySQL学习|黑马笔记|Day3】多表查询(多表关系、内连接、外连接、自连接、联合查询、子查询),事务(简介、操作、四大体系、并发事务问题、事务隔离级别)
  • 【公有云部署模型】yolo模型公有云部署
  • 用聊天方式聊聊msvcr100.dll丢失的解决方法有哪些?msvcr100.dll是什么
  • 7.pcl滤波(一)
  • Python在Web开发领域的崛起与生态探索:从脚本语言到全栈利器
  • Unity Standard Shader 解析(四)之ForwardAdd(简化版)
  • 机器视觉halcon7-缺陷检测
  • SpringCloud -- MQ高级
  • 关于获取某目录及子目录下所有文件且不包含隐藏文件
  • dify + mcp 实现图片 ocr 识别
  • Apache RocketMQ 的核心概念(Core Concepts)
  • 解决 Node.js 托管 React 静态资源的跨域问题
  • SpringBoot之整合SSM步骤
  • 基因组选择育种-2.3多性状与多组学整合GS-GWAS