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

算法与数据结构(一)

一、时间复杂度

一个操作如果和样本的数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作。
时间复杂度为一个算法流程中,常数操作数量的一个指标。常用O(读作big O)来表示。具体来说,这个算法流程中,发生了多少常数操作,进而总结出常数操作数量的表达式。
评价一个算法流程的好坏,先看时间复杂度的指标,然后再分析不同数据样本下的实际运行时间,也就是“常数项时间”。
选择排序、冒泡排序的时间复杂度为O(N2)O(N^2)O(N2),额外空间复杂度为O(1)O(1)O(1)
c++实现的选择排序算法:

	//创建一个数组int arr[] = {1, 6, 3, 6, 8, 6, 4};//判断数组是否为空或者只有一个数组if (arr == NULL || sizeof(arr) < 2){return;}//开始选择排序for (int i = 0; i < sizeof(arr)/sizeof(arr[0]) - 1; i++){// 暂存最小的数据下标索引int min = i;//从第一个操作数开始筛选for (int j = i + 1; j < sizeof(arr) / sizeof(arr[0]); j++){if (arr[min] > arr[j]){int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}}}for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++){cout << arr[i] << " ";}cout << endl;

冒泡排序:

	//创建数组int arr[] = { 2, 3, 5, 1, 3, 4, 5 };//判断数组是否为空或者只有一个数组if (arr == NULL || sizeof(arr) < 2){return;}//开始冒泡排序for (int i = sizeof(arr) / sizeof(arr[0]) - 1; i > 0; i--){for (int j = 0; j < i; j++){if (arr[j] > arr[j+1]){arr[i] = arr[j] ^ arr[i];arr[j] = arr[j] ^ arr[i];arr[i] = arr[j] ^ arr[i];}}}//输出排序后的数组for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++){cout << arr[i] << " ";}cout << endl;

以上两种排序算法不管数组内部是什么情况,都需要执行固定的操作,但是插入排序要考虑数组内部的情况,在最好情况下(数组刚好按照想要排序的顺序排列),其时间复杂度为O(N)O(N)O(N),,最差情况下((数组刚好与想要排序的顺序相反)),其时间复杂度为O(N2)O(N^2)O(N2),在时间复杂度的考量上,以最差情况为标准,所以为O(N2)O(N^2)O(N2),其c++实现:

//创建数组int arr[] = { 2, 2, 3, 1, 3, 1, 5, 6 };//如果数组为空或者只有一个数据时,跳过if (arr == NULL || sizeof(arr) < 2){return;}//外侧循环for (int i = 1; i < sizeof(arr)/ sizeof(arr[0]); i++){//内侧循环for (int j = i; j > 0; j--){//如果内测循环指针指向的数据比左侧数据小,则进行交换if (arr[j - 1] > arr[j]){int tem = arr[j];arr[j] = arr[j - 1];arr[j - 1] = tem;}}}//输出排序后的数组for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++){cout << arr[i] << " ";}cout << endl;

二、力扣刷题:

有一系列数组,只有一个数字出现了奇数次,其余的数出现了偶数次,求出出现奇数次的数据,要求算法的时间复杂度为O(N):

void test10()
{//创建一系列数组int arr[] = { 2, 2, 3, 1, 3, 1, 5 };int eor = 0;for (int i = 0; i < sizeof(arr)/sizeof(arr[0]); i++){//使用初始变量0逐个异或数组中的每一个元素eor ^= arr[i];}cout << "出现奇数次的数字为:  " << eor << endl;
}

在异或操作中,0异或0就会出现0的结果,1异或1就等于0,1异或0就等于1。异或操作也可以看成二进制的无进位相加。所以当数组中出现偶数个相同的元素时,其结果会是0,由于异或操作有交换性质,当0异或一个奇数个元素时,其结果就是该数。
有一系列数组,有两个数字出现了奇数次,且这两个奇数次的元素不相等,其余的数出现了偶数次,求出出现奇数次的数据,要求算法的时间复杂度为O(N):

	//创建一系列数组int arr[] = { 2, 2, 3, 1, 3, 1, 5, 6 };int eor = 0;int eor1 = 0;for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++){//最终得出a异或b的结果eor ^= arr[i];}//提取eor二进制中的最后一个1int RightOne = eor & (~eor + 1);for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++){if ((RightOne & arr[i]) == 0){//得出两个奇数次数数字之一eor1 ^= arr[i];}}cout << eor1 << (eor1 ^ eor) << endl;

假设两个出现奇数次的数分别为a,b。这道算法题与之前的算法题有相同之处,但是第一次遍历异或的结果是a异或b。我们只需要知道a或者b再异或一下a异或b的结果就可以得到另一个数字的结果。我们可以这样假设,因为a与b不相等,a异或b的结果也就肯定不为0。在二进制中,a异或b的结果肯定某一位会出现1。假设a异或b的结果为1010。在这里我们只看其中的一位,也就是第二位。a异或b在第二位中出现1,反映到a,b上我们可以知道。a或者b肯定在第二位为1,在这里我们假设a在第二位为1。我们只需要再次迭代一下数组中的元素,可以通过与的操作将第二位上不是1的数进行过滤,如果第二位上是1,我们只需要进行一个异或操作即可,因为除了a之外,其余第二位上是1的数都是偶数,所以最后异或出来的数就是a,再用a异或(a异或b)的结果可以得出b。

相关文章:

算法与数据结构(一)

一、时间复杂度 一个操作如果和样本的数据量没有关系&#xff0c;每次都是固定时间内完成的操作&#xff0c;叫做常数操作。 时间复杂度为一个算法流程中&#xff0c;常数操作数量的一个指标。常用O(读作big O)来表示。具体来说&#xff0c;这个算法流程中&#xff0c;发生了多…...

【Python】元组如何创建?

嗨害大家好鸭&#xff01;我是小熊猫~ Python 元组 Python 的元组与列表类似&#xff0c; 不同之处在于元组的元素不能修改。 元组使用小括号&#xff0c;列表使用方括号。 元组创建很简单&#xff0c;只需要在括号中添加元素&#xff0c; 并使用逗号隔开即可。 如下实例…...

qt操作文件以及字符串转换

//从文件加载英文属性与中文属性对照表QFile file(":/propertyname.txt");if (file.open(QFile::ReadOnly)) {//QTextStream方法读取速度至少快百分之30#if 0while(!file.atEnd()) {QString line file.readLine();appendName(line);}#elseQTextStream in(&file)…...

数组中只出现一次的两个数字(异或法思路)

题目简介 一个数组中只有2个数字只有一个&#xff0c;其他数字都有两个。找出这两个数字。a, b 用HashMap记录就不说了。 这里记录一下用异或的方式解决。 由于异或特性为自己异或自己为0。a^a 0;所以可以异或数组中的所有数字得出 a^b 的结果&#xff0c;其他相同的都消掉…...

python支持的操作系统有哪些

支持python开发环境的系统有Linux、OSX和windows&#xff0c;以及所有主要的操作系统中。 Linux&#xff0c;Linux系统是为编程而设计的&#xff0c;因此在大多数Linux计算机中&#xff0c;都默认安装了Python。编写和维护Linux的人认为会使用这种系统进行编程。要在Linux中运…...

S3C2440开发环境搭建

拿出了之前的S3C2440开发板&#xff0c;然后把移植uboot、移植内核、制作根文件系统、设备树编写驱动等几项再做一遍&#xff0c;这篇文章先记录下环境搭建过程&#xff0c;以及先把现成的uboot、内核、根文件系统下载进去&#xff0c;看看开发板还能不能用&#xff0c;先熟悉一…...

软件测试之测试用例

测试用例 1. 测试用例定义 测试用例又叫做test case&#xff0c;是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。 2. 编写测试用例的原因 2.1 理清思路&#xff0c;避免遗漏 如果测试的项目大而复杂&#…...

null和undefined的区别有哪些?

null和undefined的区别有哪些&#xff1f;相同点不同点undefinednull总结相同点 1.null和undefined都是js的基本数据类型 2.undefined和null都是假值&#xff08;falsy&#xff09;,都能作为条件进行判断&#xff0c;所以在绝大多数情况下两者在使用上没有区别 if(undefined)…...

【强烈建议收藏:计算机网络面试专题:HTTP协议、HTTP请求报文和响应报文、HTTP请求报文常用字段、HTTP请求方法、HTTP响应码】

一.知识回顾 之前我们一起学习了HTTP1.0、HTTP1.1、HTTP2.0协议之前的区别、以及URL地址栏中输入网址到页面展示的全过程&&DNS域名解析的过程、HTTP协议基本概念以及通信过程、HTTPS基本概念、SSL加密原理、通信过程、中间人攻击问题、HTTP协议和HTTPS协议区别。接下来…...

关于Java中的静态块讲解

文章目录类的加载特性与时机类加载的特性类加载的时机static的三个常用地方什么是静态块?特点写法静态块 static怎么用?类的加载特性与时机 在介绍static之前可以先看看类的相关 类加载的特性 在JVM的生命周期里&#xff0c;每个类只会被加载一次。 类加载的原则&#xf…...

ledcode【用队列实现栈】

目录 题目描述&#xff1a; 解析题目 代码解析 1.封装一个队列 1.2封装带两个队列的结构体 1.3封装指向队列的结构体 1.4入栈函数实现 1.5出栈函数实现 1.6取栈顶数据 1.7判空函数实现 题目描述&#xff1a; 解析题目 这个题我是用c语言写的&#xff0c;所以队列的pu…...

【基础算法】双指针----字符串删减

&#x1f339;作者:云小逸 &#x1f4dd;个人主页:云小逸的主页 &#x1f4dd;Github:云小逸的Github &#x1f91f;motto:要敢于一个人默默的面对自己&#xff0c;强大自己才是核心。不要等到什么都没有了&#xff0c;才下定决心去做。种一颗树&#xff0c;最好的时间是十年前…...

Billu靶场黑盒盲打——思路和详解

一、信息收集 1、探测内网主机IP可以使用各种扫描工具比如nmap&#xff0c;我这里用的是自己编写的。 nmap -n 192.168.12.0/24 #扫描IP&#xff0c;发现目标主机 2、先不着急&#xff0c;先收集一波它的端口&#xff08;无果&#xff09; nmap -n 192.168.12.136 -p 1-10000…...

【2363. 合并相似的物品】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你两个二维整数数组 items1 和 items2 &#xff0c;表示两个物品集合。每个数组 items 有以下特质&#xff1a; items[i] [valuei, weighti] 其中 valuei 表示第 i 件物品的 价值 &#xff0c;we…...

【C++提高编程】C++全栈体系(二十四)

C提高编程 第三章 STL - 常用容器 九、map/ multimap容器 1. map基本概念 简介&#xff1a; map中所有元素都是pairpair中第一个元素为key&#xff08;键值&#xff09;&#xff0c;起到索引作用&#xff0c;第二个元素为value&#xff08;实值&#xff09;所有元素都会根…...

c++11 标准模板(STL)(std::unordered_set)(十一)

定义于头文件 <unordered_set> template< class Key, class Hash std::hash<Key>, class KeyEqual std::equal_to<Key>, class Allocator std::allocator<Key> > class unordered_set;(1)(C11 起)namespace pmr { templ…...

AI/CV大厂笔试LeetCode高频考题之基础核心知识点

AI/CV互联网大厂笔试LeetCode高频考题之基础核心知识点算法复习1、二叉树的遍历2、回溯算法3、二分搜索4、滑动窗口算法题5、经典动态规划6、动态规划答疑篇6.1、总结一下如何找到动态规划的状态转移关系7、编辑距离8、戳气球问题9、最长公共子序列 Longest Common Subsequence…...

华为OD机试题,用 Java 解【静态扫描最优成本】问题

最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…...

常见无线技术方案介绍

无线技术 无线网络大体有两种&#xff1a;WAN&#xff08;广域网&#xff09;、PAN&#xff08;个人区域网&#xff09;。 对于LoRa&#xff0c;NB-IoT&#xff0c;2G / 3G / 4G等无线技术&#xff0c;通常传输距离超过1 km&#xff0c;因此它们主要用于广域网&#xff08;WA…...

收获满满的2022年

收到csdn官方的证书&#xff0c;感谢官方的认可&#xff01;...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...