C++数据结构与算法
C++数据结构与算法
1.顺序表代码模版
C++顺序表模版
#include <iostream>
using namespace std;
// 可以根据需要灵活变更类型
#define EleType intstruct SeqList
{EleType* elements;int size;int capacity;
};// Init a SeqList
void InitList(SeqList* list, int capacity)
{list->elements = new EleType[capacity]();list->size = 0;list->capacity = capacity;
}// Destory a SqeList
void DestoryList(SeqList* list)
{list->size = 0;delete[] list->elements;
}// Is Empty
bool IsEmpty(SeqList* list)
{return list->size == 0;
}// Inser a value into SeqList at position
void Insert(SeqList* list, int index, EleType element)
{// Check conditionsif (index < 0 || index > list->size){throw std::invalid_argument("Invalid index when insert a value into SeqList");}// Enlarge the capacity, normally enlarge 1 timesif (list->size == list->capacity){int newCapacity = list->capacity * 2;EleType* newElements = new EleType[newCapacity]();for (int i = 0; i < list->size; i++){newElements[i] = list->elements[i];}delete[] list->elements;list->elements = newElements;list->capacity = newCapacity;}// Insert the datafor (int i = list->size; i > index; --i){list->elements[i] = list->elements[i-1];}list->elements[index] = element;list->size++;
}// Delet the value at index
void DeleteElement(SeqList* list, int index)
{if (index < 0 || index >= list->size){throw std::invalid_argument("Invalid index of the elements which needed delete");return;}for (int i = index; i < list->size - 1; i++){list->elements[i] = list->elements[i + 1];}list->size--;
}// Find element in list, return the index
int FindElement(SeqList* list, EleType element)
{for (int i = 0; i < list->size; i++){if (list->elements[i] == element){return i;}}return -1;
}// Get element at index in the list
EleType GetElement(SeqList* list, int index)
{if(index < 0 || index >= list->size){throw std::invalid_argument("Invalid index to get the element in list");}return list->elements[index];
}// Update the value at index in list
void UpdateElement(SeqList* list, int index, EleType value)
{if (index < 0 || index >= list->size){throw std::invalid_argument("Invalid index to Update the element in list");}list->elements[index] = value;
}// Show
void Show(SeqList* list)
{if (list != NULL){std::cout << "list size: " << list->size << std::endl;std::cout << "List capacity:" << list->capacity << std::endl;for (int i = 0; i < list->size; i++){std::cout << "value[" << i << "] = " << list->elements[i] << " " << std::ends;}std::cout << std::endl;}else{std::cout << "The list is null" << std::endl;}
}
2.杭电算法2006-求奇数的乘积
1.题目–如图

2.使用顺序表解题代码
// 调用使用代码模版
int numbers[10000];
int main()
{int n;// 循环用例while(cin >> n){SeqList list;InitList(&list, 1);int prod = 1;for(int i = 0 ; i < n; ++i){int x; cin >> x;Insert(&list, i, x);EleType tmp = GetElement(&list, i);if(tmp % 2 == 1){prod = prod * tmp;}}cout << prod <<endl;}return 0;
}
3.使用数组解题
#include <iostream>
using namespace std;
int main()
{int n;while(cin >> n){for(int i = 0; i < n; ++i){int x;cin >> x;numbwers[i] = x;}int prod = 1;for(int i = 0; i < n; ++i){int tmp = numbwers[i];if(tmp % 2 == 1){prod = prod * tmp;}}cout << prod << endl;}return 0;
}
输入:
3 1 2 3
4 2 3 4 5
输出
3
15
3.顺序表模版更新
#include <iostream>
using namespace std;
// 可以根据需要灵活变更类型
#define EleType intstruct SeqList
{EleType* elements;int size;int capacity;
};// Init a SeqList
void InitList(SeqList* list, int capacity)
{list->elements = new EleType[capacity]();list->size = 0;list->capacity = capacity;
}// Destory a SqeList
void DestoryList(SeqList* list)
{list->size = 0;delete[] list->elements;
}// Is Empty
bool IsEmpty(SeqList* list)
{return list->size == 0;
}// Inser a value into SeqList at position
void Insert(SeqList* list, int index, EleType element)
{// Check conditionsif (index < 0 || index > list->size){throw std::invalid_argument("Invalid index when insert a value into SeqList");}// Enlarge the capacity, normally enlarge 1 timesif (list->size == list->capacity){int newCapacity = list->capacity * 2;EleType* newElements = new EleType[newCapacity]();for (int i = 0; i < list->size; i++){newElements[i] = list->elements[i];}delete[] list->elements;list->elements = newElements;list->capacity = newCapacity;}// Insert the datafor (int i = list->size; i > index; --i){list->elements[i] = list->elements[i-1];}list->elements[index] = element;list->size++;
}// Delet the value at index
void DeleteElement(SeqList* list, int index)
{if (index < 0 || index >= list->size){throw std::invalid_argument("Invalid index of the elements which needed delete");return;}for (int i = index; i < list->size - 1; i++){list->elements[i] = list->elements[i + 1];}list->size--;
}// Find element in list, return the index
int FindElement(SeqList* list, EleType element)
{for (int i = 0; i < list->size; i++){if (list->elements[i] == element){return i;}}return -1;
}// Get element at index in the list
EleType GetElement(SeqList* list, int index)
{if(index < 0 || index >= list->size){throw std::invalid_argument("Invalid index to get the element in list");}return list->elements[index];
}// Update the value at index in list
void UpdateElement(SeqList* list, int index, EleType value)
{if (index < 0 || index >= list->size){throw std::invalid_argument("Invalid index to Update the element in list");}list->elements[index] = value;
}// Show
void Show(SeqList* list)
{if (list != NULL){std::cout << "list size: " << list->size << std::endl;std::cout << "List capacity:" << list->capacity << std::endl;for (int i = 0; i < list->size; i++){std::cout << "value[" << i << "] = " << list->elements[i] << " " << std::ends;}std::cout << std::endl;}else{std::cout << "The list is null" << std::endl;}
}
4.杭电算法2008-数值统计
1.题目–如图

2.使用顺序表解题
#include <iostream>
using namespace std;
// 使用模版
// EleType 为double类型int main()
{int n;while(cin >> n && n){// 创建初始化顺序表SeqListlist;InitList(&list, 1);// 输出数据for(int i = 0; i < n; ++i){eleType x;cin >> x;Insert(&list, i, x);}// 判断判断数据大小EleType tmp;int negative = 0;int positive = 0;int equalZero = 0;for(int i = 0; i < GetSize(&list); ++i){tmp = GetElement(&list, i);if(tmp > 1e-8){++positive;}else if(tmp < -1e-8){++negative;}else{++equalZero;}}cout << negative <<" "<< equalZero <<" " << positive << endl;}return 0;
}
5.杭电算法2014-青年歌手大奖赛_评委会打分
1.题目–如图

2.顺序表解题
void Solution2014()
{int n;while (cin >> n){SeqList list;InitList(&list, 1);EleType x;for (int i = 0; i < n; i++){cin >> x;Insert(&list, i, x);}EleType max = -1000000;EleType min = 1000000;EleType sum = 0;for (int i = 0; i < list.size; i++){if (max < list.elements[i]){max = list.elements[i];}if (min > list.elements[i]){min = list.elements[i];}sum += list.elements[i];}sum -= max;sum -= min;printf("%.2f\n", sum/(n-2));}
}
int main()
{Solution2014();return 0;
}
3.使用数组解题
#include <iostream>
using namespace std;
int main()
{int n;while(cin >> n){doubel numbers[n];// 输入数据for(int i = 0; i < n; i++){double x;cin >> x;numbers[i] = x}double eleMax = -10000000;double eleMin = 10000000;double sum = 0;for(int i = 0; i < n; ++i){double ele = numbers[i];if(ele > eleMax){eleMax = ele;}if(ele < eleMin){eleMin = ele;}sum += ele;}sum -= eleMax;sum -= eleMin;sum /= (n -2);printf("%.2f\n", sum);}return 0;
}
6.LeetCode-LCP 01 猜数字
1.题目–如图

链接: LCP 01. 猜数字 - 力扣(LeetCode)
2.解题
class Solution {
public:int game(vector<int>& guess, vector<int>& answer) {int ret = 0;for(int i = 0; i < 3; ++i){if(guess[i] == answer[i])ret++;}return ret;}
};
7.LeetCode-LCP 06 拿硬币
1.题目–如图

2.解题:
class Solution {
public:int minCount(vector<int>& coins) {int count = 0;for(int i= 0; i < coins.size(); i++){count += coins[i] / 2;if(coins[i]%2 == 1){count+=1;}}return count;}
};
3.减少内存的做法
class Solution {
public:int minCount(vector<int>& coins) {int ret = 0;for(int i = 0; i < coins.size(); ++i){// 加上1 后再 整除2得到结果, cpu做加法快,分支慢// 代替分支+/ + %的做法ret += (coins[i] + 1) / 2;}return ret;}
};
8.LeetCode-LCP 2057 值相等的最小索引
1.题目–如图

1.解题:
class Solution {public:int smallestEqual(vector<int>& nums) {int ret = -1;for(int i = 0; i < nums.size(); ++i){if(i % 10 == nums[i]){return i;}}return ret; }
};
9.LeetCode-LCP 485 最大连续的个数
1.题目–如题

2.解题
class Solution {
public:int findMaxConsecutiveOnes(vector<int>& nums) {// 00 111 01 0 1111 0000 11111111int ret = 0; // 最终结果int pre = 0; // 到当前数字最大连续1的个数(局部)for(int i = 0; i < nums.size(); ++i){if(nums[i] == 1){pre += 1;// 局部与整体比较if(pre > ret){ret = pre;}}else{pre = 0;}}return ret;}
};
3.减少内存的做法
原理: 将每一个数提取出来, 并作为if的条件判断 , 最终的落脚点是在当前的值和上一个的值的比较。
class Solution {
public:int findMaxConsecutiveOnes(vector<int>& nums) {int l = 0, r = 0;int maxlen = 0;int curlen = 0;while(r < nums.size()){int in = nums[r];r++;if(in){curlen++;}else{maxlen = max(maxlen, curlen);curlen = 0;l = r;}}maxlen = max(maxlen, curlen);return maxlen;}
};
10.LeetCode-LCP 2006. 差的绝对值为 K 的数对数目
1.题目–如图

2.解题
class Solution {
public:int countKDifference(vector<int>& nums, int k) {int ret = 0;for(int i = 0; i < nums.size(); i++){for(int j = i+1; j < nums.size(); j++){if(abs(nums[i] - nums[j]) == k){ret++;}}}return ret;}
};
11.LeetCode-LCP 1464. 数组中两元素的最大乘积
1.题目–如图

2.解题:
暴力破解
class Solution {
public:int maxProduct(vector<int>& nums) {int ret = 0;int pre = 0;for(int i = 0; i < nums.size(); i++){for(int j = 0; j < nums.size(); j++){if(i != j){ret = (nums[i] - 1) * (nums[j] - 1);if(pre < ret){pre = ret;}}}}return max(ret, pre);}
};
减少时间复杂度的做法
找到最大值的下标和次最大值的下标即可
class Solution {
public:int maxProduct(vector<int>& nums) {int maxIndex = 0;for(int i = 1; i < nums.size(); i ++){if(nums[i] > nums[maxIndex]){maxIndex = i;}}int subMaxIndex = -1;for(int i = 0; i < nums.size(); i ++){if(i != maxIndex){if(nums[i] > nums[subMaxIndex]){subMaxIndex = i;}}}return (num(maxIndex)-1) * (num(subMaxIndex) - 1);}
};
12.LeetCode-2535. 数组元素和与数字和的绝对差
1.题目–如图

2.解题
思路: 元素累加到x。 每一个元素的数字和累加到y, 得到x y差值的绝对值
class Solution {
public:int differenceOfSum(vector<int>& nums) {int x = 0;int y = 0;for(int i = 0; i < nums.size(); i++){x += nums[i];while(nums[i]){y += nums[i]%10;nums[i] /= 10;}}return abs(x-y);}
};
相关文章:
C++数据结构与算法
C数据结构与算法 1.顺序表代码模版 C顺序表模版 #include <iostream> using namespace std; // 可以根据需要灵活变更类型 #define EleType intstruct SeqList {EleType* elements;int size;int capacity; };// Init a SeqList void InitList(SeqList* list, int capa…...
Paddle Inference部署推理(三)
三:Paddle Inference推理 导出模型 Paddle Inference支持使用飞桨静态图模型进行推理,您可以通过以下两种方式获取静态图模型: (1)飞桨框架导出推理模型 飞桨框架在训练模型过程中,会在本地存储最终训练…...
python(四)os模块、sys模块
一、os模块 os 模块提供了很多程序与操作系统直接交互的功能 名称描述示例os.getcwd()得到当前工作目录,即当前Python脚本工作的目录路径‘D:\python’os.listdir()返回指定目录下的所有文件和目录名>>> os.listdir()os.remove()函数用来删除一个文件>…...
Oracle 数据库 IDENTITY 列
IDENTITY列是Oracle数据库12c推出的新特性。之所以叫IDENTITY列,是由于其支持ANSI SQL 关键字 IDENTITY,其内部实现还是使用SEQUENCE。 不过推出这个新语法也是应该的,毕竟MyQL已经有 AUTO_INCREMENT列,而SQL Server也已经有IDENT…...
【前端】js vue 屏蔽BackSpace键删除键导致页面后退的方法
【前端】js vue 屏蔽BackSpace键删除键导致页面后退的方法 方法一:通过全局事件监听阻止 Backspace 导致页面后退 在 main.js 或组件的 mounted 中添加以下代码: //【前端】js vue 屏蔽BackSpace键删除键导致页面后退的方法 document.addEventListener…...
深入解密 K 均值聚类:从理论基础到 Python 实践
1. 引言 在机器学习领域,聚类是一种无监督学习的技术,用于将数据集分组成若干个类别,使得同组数据之间具有更高的相似性。这种技术在各个领域都有广泛的应用,比如客户细分、图像压缩和市场分析等。聚类的目标是使得同类样本之间的…...
ArcGIS应用指南:ArcGIS制作局部放大地图
在地理信息系统(GIS)中,制作详细且美观的地图是一项重要的技能。地图制作不仅仅是简单地将地理数据可视化,还需要考虑地图的可读性和美观性。局部放大图是一种常见的地图设计技巧,用于展示特定区域的详细信息ÿ…...
非root用户安装CUDA
1.使用nvidia-smi查看当前驱动支持的最高CUDA版本: 表示当前驱动最多支持cuda12.1 2.进入cuda安装界面,https://developer.nvidia.com/cuda-toolkit-archive,选择想要安装的版本,例如想要安装CUDA11.4: 如果需要查看ub…...
单点修改,区间求和或区间询问最值(线段树)
【题目描述】 给定一个长度为n的非负整数序列,接下来有m次操作,操作共有3种:一是修改序列中某个元素的大小,二是求某个区间的所有元素的和,三是询问某个区间的最大值。整数序列下标从1开始。n<10^5, m<10^5。 …...
线性代数空间理解
学习线性代数已经很久,但是在使用过程中仍然还是不明所以,比如不知道特征向量和特征值的含义、矩阵的相乘是什么意思、如何理解矩阵的秩……。随着遇到的次数越来越多,因此我决定需要对线性代数的本质做一次深刻的探讨了。 本次主要是参考了3…...
Spring Boot教程之五:在 IntelliJ IDEA 中运行第一个 Spring Boot 应用程序
在 IntelliJ IDEA 中运行第一个 Spring Boot 应用程序 IntelliJ IDEA 是一个用 Java 编写的集成开发环境 (IDE)。它用于开发计算机软件。此 IDE 由 Jetbrains 开发,提供 Apache 2 许可社区版和商业版。它是一种智能的上下文感知 IDE,可用于在各种应用程序…...
C51相关实验
C51相关实验 LED //功能:1.让开发板的LED全亮,2,点亮某一个LED,3.让LED3以5Hz的频率闪动#include "reg52.h"#define LED P2 sbit led1 LED^1;void main(void) {LED 0xff;//LED全灭led1 0;while(1)//保持应用程序不退出{} }LED 输出端是高…...
docker离线安装linux部分问题整理
0:离线安装docker过程命令 echo $PATH tar -zxvf docker-26.1.4.tgz chmod 755 -R docker cp docker/* /usr/bin/ root 权限 vim /etc/systemd/system/docker.service --------- [Unit] DescriptionDocker Application Container Engine Documentationhttps://docs.do…...
ISUP协议视频平台EasyCVR萤石设备视频接入平台银行营业网点安全防范系统解决方案
在金融行业,银行营业厅的安全保卫工作至关重要,它不仅关系到客户资金的安全,也关系到整个银行的信誉和运营效率。随着科技的发展,传统的安全防护措施已经无法满足现代银行对于高效、智能化安全管理的需求。 EasyCVR视频汇聚平台以…...
递推概念和例题
一、什么是递推 递推算法以初始值为基础,用相同的运算规律,逐次重复运算,直至求出问题的解,它的本质是按照固定的规律逐步推出(计算出)下一步的结果 这种从“起点”重复相同的的方法直至到达问题的解&…...
开发工具 - VSCode 快捷键
以下是一些常用的 VS Code 快捷键(Windows、macOS 和 Linux 均适用,略有不同): 常用快捷键 功能Windows/LinuxmacOS打开命令面板Ctrl Shift P 或 F1Cmd Shift P打开文件Ctrl OCmd O保存文件Ctrl SCmd S全部保存Ctrl K,…...
数据库的联合查询
数据库的联合查询 简介为什么要使⽤联合查询多表联合查询时MYSQL内部是如何进⾏计算的构造练习案例数据案例:⼀个完整的联合查询的过程 内连接语法⽰例 外连接语法 ⽰例⾃连接应⽤场景示例表连接练习 ⼦查询语法单⾏⼦查询多⾏⼦查询多列⼦查询在from⼦句中使⽤⼦查…...
【人工智能】基于PyTorch的深度强化学习入门:从DQN到PPO的实现与解析
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 深度强化学习(Deep Reinforcement Learning)是一种结合深度学习和强化学习的技术,适用于解决复杂的决策问题。深度Q网络(DQN)和近端策略优化(PPO)是其中两种经典的算法,被广泛应用于游戏、机器人控…...
【深度学习】【RKNN】【C++】模型转化、环境搭建以及模型部署的详细教程
【深度学习】【RKNN】【C】模型转化、环境搭建以及模型部署的详细教程 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【RKNN】【C】模型转化、环境搭建以及模型部署的详细教程前言模型转换--pytorch转rknnpytorch转onnxonnx转rkn…...
CentOS环境上离线安装python3及相关包
0. 准备操作系统及安装包 准备操作系统环境: 首先安装依赖包,安装相应的编译工具 [rootbigdatahost bin]# yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-d…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
