当前位置: 首页 > 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…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...