时间复杂度和运算
时间复杂度
在算法和数据结构中,有许多时间复杂度比 O(1) 更差的情况。以下是一些常见的时间复杂度,按照从最优到最差的顺序排列:
-
O(1): 常数时间复杂度,操作的运行时间与输入规模无关,是最理想的情况。
-
O(log n): 对数时间复杂度,常见于分治算法和二分搜索等。
-
O(n): 线性时间复杂度,操作的运行时间与输入规模成正比。
-
O(n log n): 线性对数时间复杂度,常见于一些高效的排序算法,如快速排序和归并排序。
-
O(n^2): 平方时间复杂度,常见于一些简单的嵌套循环算法-选择,冒泡,插入
-
O(n^k): 多项式时间复杂度,其中 k 是常数,通常表示更高次幂的多项式时间复杂度。
-
O(2^n): 指数时间复杂度,常见于一些指数级增长的问题,如穷举搜索。
-
O(n!): 阶乘时间复杂度,通常表示在排列组合问题中的情况。时间复杂度表示形式
对应的"选泡插"排序时间复杂度都是O(n^2)空间复杂度是O(1)
冒泡排序
时间复杂度:有两个for循环,第一个for循环是每个元素都要与其他的元素比较一遍,所以如果有N个元素,那么最外层的for循环的时间复杂度就是O(N),然后每一次外层的for循环,都会在内部的for循环中两两进行比较,又是O(N),因为是for循环嵌套.所以最后的时间复杂度就是O(n^2),空间复杂度的话-一般来说,除了用户要求的内存空间之外,额外申请的新的空间,则就是空间复杂度,这里用了一个temp临时变量来存储数据,所以该空间复杂度是O(1)
public class 冒泡排序 {public static void main(String[] args) {int arr[] = {1, 2, 4, 5, 3, 6, 8, 7};//第一层for循环代表的是轮数,从第一个数开始,每个数都要和其他的数进行比较,所以有多少数,总共就有多少轮for (int i = 0; i < arr.length; i++) {//第二层for循环代表的是如果是逆序则换位置,因为有j+1 为了防止下标越界,所以在第二层for循环的时候,在减1for (int j=0;j<arr.length-i-1;j++){if (arr[j]>arr[j+1]){int tepm =arr[j];arr[j]=arr[j+1];arr[j+1]=tepm;}}}for (int i : arr) {System.out.print(i);}}}
选择排序
package 算法;
public class 选择排序 {//先在[0~n-1]下标范围内找到最小值放到0位置上;//再在[1~n-1]下标范围内找到最小值放到1位置上;//依次如此操作,直到最后一个最小值【最大值】放在n-1位置上,完成排序操作;public static void main(String[] args) {int arr[] = {2, 1, 4, 5, 3, 6, 8, 7};for (int i = 0; i < arr.length-1; i++) {int minIndex=i;//最小值的下标设为第一个数的下标索引//然后第一个数和第二个数开始进行比较,看哪个数是最小的, 如果哪个是最小的,则记住最小值的下标,然后两个数进行交换,直到和其他的元素都比较完后,在走下一个数(也就是第一层for循环)for (int j=i+1;j<arr.length;j++){minIndex=arr[j]<arr[minIndex]?j:minIndex;}//交换位置int temp =arr[i];arr[i]=arr[minIndex];arr[minIndex]=temp;}for (int i : arr) {System.out.print(i);}}}
插入排序
public class 插入排序 {//思路就是:默认第一个数的位置已经确定.从第二个位置开始,如果比第一个位置的数小,则换位置,//第三个数再和第二个数比较,如果小于第二个数,则换位置,否则不换,然后继续和第一个位置上的数进行比较,小于则换位置.否则不换, 以此类推public static void main(String[] args) {int arr[] = {2, 1, 4, 5, 3, 6, 8, 7};for (int i = 1; i < arr.length; i++) {for(int j=i-1;j>=0&&arr[j]>arr[j+1];j--){int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}for (int i : arr) {System.out.print(i);}}
}
运算
异或 (^)
不同为1,相同为0 有两个特性: a^0=a a^a=0
例题1:
a=1 ,b=2 在不使用第三个临时变量来完成两个数的交换,这里就可以用到异或方法
package 算法;/*** @author : gaoPengShuai* @date : 2023/11/21 21:21* @modyified By :*/
public class 异或 {public static void main(String[] args) {int a =1;int b=2;System.out.println("交换之前a的值是:"+a+" b的值是:"+b);//在不使用第三个变量来完成两个数的交换a=a^b;b=a^b;a=a^b;System.out.println("交换之后a的值是:"+a+" b的值是:"+b);}
}运行结果:交换之前a的值是:1 b的值是:2
交换之后a的值是:2 b的值是:1Process finished with exit code 0
例题2:
在一个数组中,一个数出现了奇数次,其他的数出现了偶数次.找到该出现奇数次的数
public static void test1(){//在一个数组中,一个数出现了奇数次,其他的数出现了偶数次.找到该出现奇数次的数int arr[] ={1,2,3,2,3,3,1};int temp =0;for (int i : arr) {temp^=i;}System.out.println(temp);}
注意:这两个例题就用到了,a^a=0 然后0^b=b的方法,直接将两个数进行交换,但是值得注意的是,a和b值可以相同,但是内存地址不能相同,因为自己异或自己的结果是0,会将之前的值覆盖为0
例题3:
找到一个数转为二进制后,提取出最右侧的1
public static void test3(){//找到一个数转为二进制后,提取出最右侧的1int a=5;int eor=a &(-a);//也可以写成 a&(~a+1)System.out.println("值是:"+eor);}运行结果:
值是:1
或 ( | )
1 or 1=1,1 or 0=1,0 or 0=0,0 or 1=1。参加运算的两个对象只要有一个为1,其值为1
与 (&)
0&0=0; 0&1=0; 1&0=0; 1&1=1. 两位同时为“1”,结果才为“1”,否则为0
取反( ~ )
~ 取反 ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
左移(<<)
左移1位:相当于将该数的二进制后面补一个0 ,原理整体向左边走,就是之前的值乘2;
右移(>>)
右移1位:相当于将该数的二进制后面少一位 ,原理整体向右走,就是之前的值除以2;
相关文章:

时间复杂度和运算
时间复杂度 在算法和数据结构中,有许多时间复杂度比 O(1) 更差的情况。以下是一些常见的时间复杂度,按照从最优到最差的顺序排列: O(1): 常数时间复杂度,操作的运行时间与输入规模无关,是最理想的情况。 O…...
深入Tailwind CSS中的文本样式
深入Tailwind CSS中的文本样式 样式文本是网页设计的一个基本组成部分,而 Tailwind CSS 提供了范围广泛的实用类,使文本样式设计既高效又有效。 在本本中,我们将探索文本样式的常见最佳实践,讨论潜在的陷阱,并推荐设计方法。我们…...

系统优化软件Bitsum Process Lasso Pro v12.4,供大家学习研究参考
1、自动或手动调整进程优先级;将不需要抑制的进程添加到排除列表; 2、设置动态提升前台运行的进程/线程的优先级 3、设置进程黑名单,禁止无用进程(机制为启动即结束,而非拦截其启动)。 4、优化I/O优先级以及电源模式自动化。 5、ProBalance功能。翻译成中文是“进程平衡…...

敏捷DevOps专家王立杰:端到端DevOps持续交付的5P法则 | IDCF
今天有一个流行的英文缩写词用来刻画这个风云变幻的时代:VUCA(乌卡时代)。四个英文字母分别表示动荡性(Volatility)、不确定性(Uncertainty)、复杂性(Complexity)和模糊性…...

分布式锁详解
文章目录 分布式锁1. [传统锁回顾](https://blog.csdn.net/qq_45525848/article/details/134608044?csdn_share_tail%7B%22type%22:%22blog%22,%22rType%22:%22article%22,%22rId%22:%22134608044%22,%22source%22:%22qq_45525848%22%7D)1.1. 从减库存聊起1.2. 环境准备1.3. 简…...
Python入门学习篇(二)——算术运算符
1 算术运算符 1.1 分类 类型含义示例注意事项加号12➡3“12”“3"➡"123”数值之间,是加法运算(True为1,False为0)字符串之间,是进行拼接数值和字符串之间是不可以使用加法运算的,会报错-减号1-2➡-1*乘号2*3➡6/除法2/1➡2.0除法的结果永远为小数%取余10%2➡0//取…...

微软发布最新.NET 8长期支持版本,云计算、AI应用支持再强化
11 月 15 日开始的为期三天的 .NET Conf 在线活动的开幕日上,.NET 8作为微软的开源跨平台开发平台正式发布。.NET 团队着重强调云、性能、全栈 Blazor、AI 和 .NET MAUI 是.NET 8的主要亮点。.NET团队在 .NET Conf 2023 [1]活动开幕式上表示:“通过这个版…...

达索系统3DEXPERIENCE WORKS 2024 Fabrication新功能
当发现产品的制造环节,以及因产品模型本身的设计而导致制造环节存在不合理性,从而导致加工制造成本增加。 快速判断,轻松协作 在达索系统3DEXPERIENCE WORKS 2024中我们可以快速的判断产品的可制造性,以及快速与前端设计沟通协作…...
Web3与Web3.0: Web3指的是去中心化和基于区块链的网络,Web3.0指的是链接或语义网络。
目录 Web3与Web3.0: Web3指的是去中心化和基于区块链的网络 Web3.0指的是链接或语义网络。...

98、Text2Room: Extracting Textured 3D Meshes from 2D Text-to-Image Models
简介 github 利用预训练的2D文本到图像模型来合成来自不同姿势的一系列图像。为了将这些输出提升为一致的3D场景表示,将单目深度估计与文本条件下的绘画模型结合起来,提出了一个连续的对齐策略,迭代地融合场景帧与现有的几何形状࿰…...
MySQL 优化器 Index Condition Pushdown下推(ICP)
ICP 测试 准备数据 CREATE TABLE icp (employee_id int(6) NOT NULL AUTO_INCREMENT,first_name varchar(20) DEFAULT NULL,last_name varchar(25) DEFAULT NULL,email varchar(25) DEFAULT NULL,phone_number varchar(20) DEFAULT NULL,PRIMARY KEY (employee_id) );insert i…...

ruoyi 若依框架采用第三方登录
在项目中,前后端分离的若依项目,需要通过统一认证,或者是第三方协带认证信息跳转到本系统的指定页面。需要前后端都做相应的改造,由于第一次实现时已过了很久,再次重写时,发现还是搞了很长时间,…...

dom api
dom的全称为Document Object Model,即文档对象模型.所谓文档就是html页面,对象就是js里的对象,通过这个模型把页面上的元素和js里的对象关联起来. 下面是关于dom api的一些常用方法 1.获取元素 使用querySelector()方法获取一个元素 使用querySelectorAll()方法获取所有元素 当…...
音视频项目—基于FFmpeg和SDL的音视频播放器解析(二十一)
介绍 在本系列,我打算花大篇幅讲解我的 gitee 项目音视频播放器,在这个项目,您可以学到音视频解封装,解码,SDL渲染相关的知识。您对源代码感兴趣的话,请查看基于FFmpeg和SDL的音视频播放器 如果您不理解本…...

Qt项目打包发布超详细教程
https://blog.csdn.net/qq_45491628/article/details/129091320...
简单递归题
本来不想用递归做的,最后还是用了 题目如下: 洪尼玛有 n 块长度不同的木板,他想用这些木板拼成一个等边三角形的围栏,好将他的草泥马养在这个围栏里面。现在,给你这 n 块木板的长度,洪尼玛想知道他能否拼…...

再生式收音机踩坑记
下载《A Simple Regen Radio for Beginners》这篇文章也有好几年了,一直没有动手,上周末抽空做了一个,结果相当令人沮丧,一个台也收不到,用示波器测量三极管振荡波形,只有在调节再生电位器R2过程中…...

稻谷飘香金融助力——建行江门市分行助力乡村振兴
7月的台山,稻谷飘香。在大耕户李胜业的农田里,金灿灿的稻谷翻起层层稻浪,收割机在稻浪里来回穿梭,割稻、脱粒、装车等工序一气呵成。空气中弥漫着丰收的喜悦。 夏粮迎丰收的背后,是中国建设银行江门市分行(…...

【Pytorch】Visualization of Feature Maps(1)
学习参考来自 CNN可视化Convolutional Featureshttps://github.com/wmn7/ML_Practice/blob/master/2019_05_27/filter_visualizer.ipynb 文章目录 filter 的激活值 filter 的激活值 原理:找一张图片,使得某个 layer 的 filter 的激活值最大,…...
js修改浏览器地址栏里url的方法
1、更新url某一参数的值 function updateQueryStringParameter(uri, key, value) {if (!value) { return uri }var re new RegExp("([?&])" key ".*?(&|$)", "i");var separator uri.indexOf(?) ! -1 ? "&" : &q…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...

莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...