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

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部署推理(三)

三&#xff1a;Paddle Inference推理 导出模型 Paddle Inference支持使用飞桨静态图模型进行推理&#xff0c;您可以通过以下两种方式获取静态图模型&#xff1a; &#xff08;1&#xff09;飞桨框架导出推理模型 飞桨框架在训练模型过程中&#xff0c;会在本地存储最终训练…...

python(四)os模块、sys模块

一、os模块 os 模块提供了很多程序与操作系统直接交互的功能 名称描述示例os.getcwd()得到当前工作目录&#xff0c;即当前Python脚本工作的目录路径‘D:\python’os.listdir()返回指定目录下的所有文件和目录名>>> os.listdir()os.remove()函数用来删除一个文件>…...

Oracle 数据库 IDENTITY 列

IDENTITY列是Oracle数据库12c推出的新特性。之所以叫IDENTITY列&#xff0c;是由于其支持ANSI SQL 关键字 IDENTITY&#xff0c;其内部实现还是使用SEQUENCE。 不过推出这个新语法也是应该的&#xff0c;毕竟MyQL已经有 AUTO_INCREMENT列&#xff0c;而SQL Server也已经有IDENT…...

【前端】js vue 屏蔽BackSpace键删除键导致页面后退的方法

【前端】js vue 屏蔽BackSpace键删除键导致页面后退的方法 方法一&#xff1a;通过全局事件监听阻止 Backspace 导致页面后退 在 main.js 或组件的 mounted 中添加以下代码&#xff1a; //【前端】js vue 屏蔽BackSpace键删除键导致页面后退的方法 document.addEventListener…...

深入解密 K 均值聚类:从理论基础到 Python 实践

1. 引言 在机器学习领域&#xff0c;聚类是一种无监督学习的技术&#xff0c;用于将数据集分组成若干个类别&#xff0c;使得同组数据之间具有更高的相似性。这种技术在各个领域都有广泛的应用&#xff0c;比如客户细分、图像压缩和市场分析等。聚类的目标是使得同类样本之间的…...

ArcGIS应用指南:ArcGIS制作局部放大地图

在地理信息系统&#xff08;GIS&#xff09;中&#xff0c;制作详细且美观的地图是一项重要的技能。地图制作不仅仅是简单地将地理数据可视化&#xff0c;还需要考虑地图的可读性和美观性。局部放大图是一种常见的地图设计技巧&#xff0c;用于展示特定区域的详细信息&#xff…...

非root用户安装CUDA

1.使用nvidia-smi查看当前驱动支持的最高CUDA版本&#xff1a; 表示当前驱动最多支持cuda12.1 2.进入cuda安装界面&#xff0c;https://developer.nvidia.com/cuda-toolkit-archive&#xff0c;选择想要安装的版本&#xff0c;例如想要安装CUDA11.4&#xff1a; 如果需要查看ub…...

单点修改,区间求和或区间询问最值(线段树)

【题目描述】 给定一个长度为n的非负整数序列&#xff0c;接下来有m次操作&#xff0c;操作共有3种&#xff1a;一是修改序列中某个元素的大小&#xff0c;二是求某个区间的所有元素的和&#xff0c;三是询问某个区间的最大值。整数序列下标从1开始。n<10^5, m<10^5。 …...

线性代数空间理解

学习线性代数已经很久&#xff0c;但是在使用过程中仍然还是不明所以&#xff0c;比如不知道特征向量和特征值的含义、矩阵的相乘是什么意思、如何理解矩阵的秩……。随着遇到的次数越来越多&#xff0c;因此我决定需要对线性代数的本质做一次深刻的探讨了。 本次主要是参考了3…...

Spring Boot教程之五:在 IntelliJ IDEA 中运行第一个 Spring Boot 应用程序

在 IntelliJ IDEA 中运行第一个 Spring Boot 应用程序 IntelliJ IDEA 是一个用 Java 编写的集成开发环境 (IDE)。它用于开发计算机软件。此 IDE 由 Jetbrains 开发&#xff0c;提供 Apache 2 许可社区版和商业版。它是一种智能的上下文感知 IDE&#xff0c;可用于在各种应用程序…...

C51相关实验

C51相关实验 LED //功能&#xff1a;1.让开发板的LED全亮&#xff0c;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萤石设备视频接入平台银行营业网点安全防范系统解决方案

在金融行业&#xff0c;银行营业厅的安全保卫工作至关重要&#xff0c;它不仅关系到客户资金的安全&#xff0c;也关系到整个银行的信誉和运营效率。随着科技的发展&#xff0c;传统的安全防护措施已经无法满足现代银行对于高效、智能化安全管理的需求。 EasyCVR视频汇聚平台以…...

递推概念和例题

一、什么是递推 递推算法以初始值为基础&#xff0c;用相同的运算规律&#xff0c;逐次重复运算&#xff0c;直至求出问题的解&#xff0c;它的本质是按照固定的规律逐步推出&#xff08;计算出&#xff09;下一步的结果 这种从“起点”重复相同的的方法直至到达问题的解&…...

开发工具 - VSCode 快捷键

以下是一些常用的 VS Code 快捷键&#xff08;Windows、macOS 和 Linux 均适用&#xff0c;略有不同&#xff09;&#xff1a; 常用快捷键 功能Windows/LinuxmacOS打开命令面板Ctrl Shift P 或 F1Cmd Shift P打开文件Ctrl OCmd O保存文件Ctrl SCmd S全部保存Ctrl K,…...

数据库的联合查询

数据库的联合查询 简介为什么要使⽤联合查询多表联合查询时MYSQL内部是如何进⾏计算的构造练习案例数据案例&#xff1a;⼀个完整的联合查询的过程 内连接语法⽰例 外连接语法 ⽰例⾃连接应⽤场景示例表连接练习 ⼦查询语法单⾏⼦查询多⾏⼦查询多列⼦查询在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. 准备操作系统及安装包 准备操作系统环境&#xff1a; 首先安装依赖包&#xff0c;安装相应的编译工具 [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…...

学习threejs,使用设置bumpMap凹凸贴图创建褶皱,实现贴图厚度效果

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.MeshPhongMaterial高…...

React表单联动

Ant Design 1、dependencies Form.Item 可以通过 dependencies 属性&#xff0c;设置关联字段。当关联字段的值发生变化时&#xff0c;会触发校验与更新。 一种常见的场景&#xff1a;注册用户表单的“密码”与“确认密码”字段。“确认密码”校验依赖于“密码”字段&#x…...

408数据结构:栈、队列和数组选择题做题笔记

408数据结构 第一章 绪论 第二章 线性表 绪论、线性表选择题做题笔记 第三章 栈、队列和数组 栈、队列和数组选择题做题笔记 文章目录 408数据结构前言 一、队列二、栈和队列的应用总结 前言 本篇文章为针对王道25数据结构课后习题的栈、队列和数组的做题笔记&#xff0c;后续…...

sql工具!好用!爱用!

SQLynx的界面设计简洁明了&#xff0c;操作逻辑清晰易懂&#xff0c;没有复杂的图标和按钮&#xff0c;想对哪部分操作就在哪里点击右键&#xff0c;即使你是数据库小白也能轻松上手。 尽管SQLynx是一款免费的工具&#xff0c;但是它的功能却丝毫不逊色于其他付费产品&#xff…...

嵌入式驱动开发详解3(pinctrl和gpio子系统)

文章目录 前言pinctrl子系统pin引脚配置pinctrl驱动详解 gpio子系统gpio属性配置gpio子系统驱动gpio子系统API函数与gpio子系统相关的of函数 pinctrl和gpio子系统的使用设备树配置驱动层部分用户层部分 前言 如果不用pinctrl和gpio子系统的话&#xff0c;我们开发驱动时需要先…...

【C++】IO库(一):IO类

IO 库 C 不直接处理输入输出&#xff0c;而是通过定义一族定义在标准库当中的类型来处理IO。 8.1 IO 类 为了支持不同种类的 IO 处理操作&#xff0c;除了 istream 和 ostream 之外&#xff0c;标准库还定义了其它 IO 类型。这些类型分别定义在三个独立的头文件当中&#xf…...

uniapp介入极光推送教程 超级详细

直接按照下面教程操作 一步一步来 很快就能 完成 下面的文章非常详细 &#xff0c;我就不班门弄斧了 直接上原文链接 https://blog.csdn.net/weixin_52830464/article/details/143823231...

阿里云整理(一)

阿里云整理 1. 介绍规模 2. 专业名词2.1 专有网络VPC2.2 安全组SG2.3 云服务器ECS2.4 资源组2.5 部署集2.5 web测试 1. 介绍 ‌阿里云是一家提供云计算和人工智能服务的科技公司&#xff0c;成立于2009年&#xff0c;总部位于杭州。‌它为全球客户提供全方位的云服务&#xff…...

论文笔记 网络安全图谱以及溯源算法

​ 本文提出了一种网络攻击溯源框架&#xff0c;以及一种网络安全知识图谱&#xff0c;该图由六个部分组成&#xff0c;G <H&#xff0c;V&#xff0c;A&#xff0c;E&#xff0c;L&#xff0c;S&#xff0c;R>。 1|11.知识图 ​ 网络知识图由六个部分组成&#xff0c…...

室内定位论文速递(11.23-11.25)

多传感器姿态估计的Delta滤波器和卡尔曼滤波器设计在球形移动测绘系统中的应用 关键词 球形机器人;姿态估计;传感器融合;卡尔曼滤波器;Delta滤波器;移动测绘;LiDAR 研究问题 球形移动测绘系统中的惯性姿态估计过滤技术尚未得到充分研究。由于其内在的滚动运动,该系统…...