算法学习1

news2024/11/13 13:22:46

知识点

  • 一.时间复杂度
  • 二.排序
    • 1.选择排序
    • 2.冒泡排序
  • 三.异或交换

一.时间复杂度

列如:

//长度为n的整型数组
int arr[n];

//循环1
for(int i = 0 ;i < n; i++)
{
	for(int j = i;j < n;j++)
	{
		cout << arr[i] << endl;
		cout << arr[j] << endl;
	}
}

在循环中,数组中的元素在不断重复的被查看,其元素总共被查看的算式为aN2+bN+c,而时间复杂度就是只要N2其他的都可以忽略

注意:
当俩个算法的时间复杂度相同时,则需要让算法添加数据进行实际运行来进行比较

二.排序

1.选择排序

for(int i=1;i<n;i++){
		int Min=i;
		for(int j=i+1;j<=n;j++){
			if(a[j]<a[Min]){
				Min=j;
			}
		}
		swap(a[i],a[Min]);
	}

原理即使先将第 i 元素和其之后的每个元素进行比较,直到为当前最大(或最小),然后将 i 加一,接着进行下一轮比较
在这里插入图片描述

2.冒泡排序

for (i = 0; i < n - 1; i++) {
        // 设定一个标记,判断本次遍历是否进行了交换
        bool swapped = false;
        for (j = 0; j < n - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                // 交换 arr[j] 和 arr[j+1]
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
                
                // 表示进行了交换
                swapped = true;
            }
        }
        
        // 如果这一轮没有交换,说明数组已经排序好了
        if (swapped == false)
            break;
    }

第一个元素与对相邻的元素进行比较,并交换,然后又从下一个元素开始与其下一个相邻的元素进行比较,直到比较到最后一个,又开始从第一个开始进行新一轮比较,直到比较到上轮比较最后一个元素的前一个结束
在这里插入图片描述

三.异或交换

其可以看作是不进位的相加

int a = 2,b = 3;
a = a ^ b;
b = a ^ b;
a = a ^ b;
//a = 3,b = 2完成了交换

异或算法具有交换律和结合律

可以用于解决以下问题
问题一:
当数组中只有一个数出现的次数为奇数,其他的为偶数

方法:
将数组中的每个元素都进行异或算法,最后的结果就是出现奇数的值;

原因是出现偶数的值进行异或之后都变为了0;

问题二:
当数组中有两个数出现的次数为奇数,其他的为偶数

方法:
首先将数组中的每个元素都进行异或算法,最后的结果为两个奇数的异或,让后在该异或中找到二进制位上位1的位置,其含义是在该位置上两个奇数的值不相同;
接下来将数组分为两部分,一部分为该位置上为1的集合,另一部分为该位置上位0的集合,对其中的一个集合中的所有元素进行异或计算,则可以得出其中一个值;
最后将得出的值与两个数的异或值再一次进行异或,就可以得出另一个值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2150456.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(c语言+数据结构链表)项目:贪吃蛇

目录 1.项目背景 2.游戏效果演⽰ 3. ⽬标 4. 技术要点 5. Win32 API介绍 5.1 Win32 API 5.2 控制台程序 5.3 控制台屏幕上的坐标COORD 5.4 GetStdHandle 5.5 GetConsoleCursorInfo 5.5.1 CONSOLE_CURSOR_INFO 5.6 SetConsoleCursorInfo 5.7 SetConsoleCursorPositi…

统计项目代码行数工具—cloc

目录 引言一、cloc简介二、cloc安装三、cloc使用四、参考博客 引言 项目开发完成&#xff0c;想要查看自己项目的代码行数&#xff0c;强烈推荐一款非常好用的命令行工具-cloc。 一、cloc简介 只需要通过命令行的方式运行cloc&#xff0c;就可以得知指定文件代码行数、注释函…

java--章面向对象编程(高级部分)

类变量和类方法 类变量 类变量内存布局 什么是类变量 类变量也叫 静态变量/静态属性&#xff0c;是该类的所有对象共享的变量&#xff0c;任何一个该类的对象去访问它时&#xff0c;取到的都是相同的值&#xff0c;同样任何一个该类的对象去修改它时&#xff0c;修改的也是同…

基于flask+vue框架的传染病防控酒店信息系统zvt93(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;患者,服务人员,病房类型,病房信息,病房分配,需求箱,商品分类,商品信息,购买商品,分配反馈,健康上报,患者信息,患者分配 开题报告内容 基于flaskvue框架的传染病防控酒店信息系统开题报告 一、项目背景 在全球公共卫生事件频发的背景下…

排序-----选择排序

首先介绍几种排序的分类&#xff1a; 选择排序是每次都遍历&#xff0c;标记出最小的元素&#xff0c;然后把它放在前面。 本文介绍优化后的版本&#xff1a;每次遍历标记出最小的和最大的元素&#xff0c;分别放到前面和后面。&#xff08;注意这里是找到对应的下标&#xff0…

【Python报错已解决】To update, run: python.exe -m pip install --upgrade pip

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

如何使用ssm实现基于Javaweb的网上花店系统的设计与实现

TOC ssm653基于Javaweb的网上花店系统的设计与实现jsp 研究背景 自计算机发展以来给人们的生活带来了改变。第一代计算机为1946年美国设计&#xff0c;最开始用于复杂的科学计算&#xff0c;占地面积、开机时间要求都非常高&#xff0c;经过数十几的改变计算机技术才发展到今…

docker部署个人网页导航

1&#xff09;效果展示 2&#xff09;步骤 2.1&#xff09;往期部署docker自行查找 2.2&#xff09;CV命令 mkdir ~/onenav&&cd ~/onenav vi docker-compose.yml粘贴内容 version: 3 services:onenav:container_name: onenav #容器名称ports:- "3080:80"…

oracle avg、count、max、min、sum、having、any、all

组函数 having的使用 any的使用 all的使用

交换机VLAN配置

搭建拓扑图 思路&#xff1a; 先配置Access接口属性&#xff0c;包括SW1的e0/0/2&#xff0c;SW2的e0/0/3。配置Trunk端口属性&#xff0c;包括SW1的e0/0/1&#xff0c;SW2的e0/0/1&#xff0c;SW3的e0/0/2、e0/0/3。由于实验要求&#xff0c;同VLAN能够互通---->则允许SW1…

redis分布式锁(看门枸机制)

分布式锁确保在同一时间只有一个节点能获得对共享资源的独占访问权限&#xff0c;从而解决并发访问问题。 Redisson锁(简称看门狗) 它可以实现锁的延长&#xff0c;确保某个线程执行完才能让其他线程进行抢锁操作 引入看门狗机制后 如何使用&#xff1f; 1、引入依赖包 <…

大厂程序员的健身之路

大厂程序员的健身之路 基本信息饮食正餐营养补剂 睡眠训练计划 基本信息 健身时间&#xff1a;2023.03 -> 2024.09体重变化&#xff1a;52kg -> 67kg 饮食 正餐 早餐&#xff1a;不吃午餐&#xff1a;两碗米饭 鱼/鸡肉 蔬菜 酸奶晚餐&#xff1a;两碗米饭 鱼/鸡肉…

《史上最简单的 SpringCloud 教程》

Finchley版本 Spring Cloud Finchley; Spring Boot 2.0.3 史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现&#xff08;Eureka&#xff09;(Finchley版本)史上最简单的SpringCloud教程 | 第二篇: 服务消费者&#xff08;restribbon&#xff09;(Finchley版本)史上最…

栈的各种接口的实现(C)

栈的概念 栈&#xff1a; 一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。压栈&#xff1a;…

xtop:multi_driven_net与incomplete_timing_cell fail reason 分析

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 xtop做时序收敛时报告fail reason&#x

Cortex_M0开发学习_1

一、简介 意法半导体基于Arm Cortex-M0的STM32F0系列器件实现了32位性能&#xff0c;同时传承了STM32系列的重要特性&#xff0c;特别适合成本敏感型应用。STM32F0 MCU集实时性能、低功耗运算和STM32平台的先进架构及外设于一身。 STM32F0系列产品基于Cortex-M0内核&#xff0c…

基于SpringBoot的中小医院管理系统

系列文章目录 1.基于SSM的洗衣房管理系统原生微信小程序LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统LW参考示例 3.基于SpringBootVue的企业人事管理系统LW参考示例 4.基于SSM的高校实验室管理系统LW参考示例 5.基于SpringBoot的二手数码回收系统原生微信小程序LW参考示…

MACCMS 远程命令执行漏洞复现(CVE-2017-17733)

目录 漏洞介绍 工具使用 环境搭建&复现过程 这是我复现的第一个漏洞&#xff08;老天奶&#xff09;&#xff0c;有必要做一个详细的writeup。 漏洞介绍 MACCMS是一套采用PHP/MySQL数据库运行的全新且完善的强大视频电影系统。完美支持众多视频网站和高清播放器(youku,…

Vue3实战:使用 errorHandler 捕获全局错误

你好同学&#xff0c;我是沐爸&#xff0c;欢迎点赞、收藏、评论和关注。 在 Vue3 中&#xff0c;app.config.errorHandler 是一个错误处理器&#xff0c;用于为应用内抛出的未捕获错误指定一个全局处理函数&#xff0c;它接收三个参数&#xff1a;错误对象、触发该错误的组件…

一起对话式学习-机器学习03——模型评估与模型选择

【一】前言 这一部分其实已在第二节中介绍到&#xff0c;这节起到回顾归纳的作用。 【二】训练误差与测试误差 首先&#xff0c;在分类问题中&#xff0c;有误差率和准确率两个概念&#xff0c;二者和为1。 误差率&#xff1a;分类错误的样本数占总数的比例。 其次&#xff0c…