逆置算法和数组循环移动算法

元素逆置

  • 概述:其实就是将 第一个元素和最后一个元素交换,第二个元素和倒数第二个元素交换,依次到中间位置。
  • 用途:可用于数组的移动,字符串反转,链表反转操作,栈和队列反转等操作。

逆置图解

代码

// 逆置元素算法
void Reverse(int R[] , int l , int r){// R 数组,l 左边 r 右边int i , j ,temp;for(i=l , j=r; i < j; i++,j--){					// i < j 不过数组个数是奇数还是偶数都行temp = R[i];R[i] = R[j];R[j] = temp;}
}

注意:逆置算法很简单,但是能延申其他的算法


循环移动算法

  • 考研常考的一个算法,结合逆置算法,可进行实现

循环左移(右移)算法

图解

  • 第一步:循环左移 p 个元素,就将 数组前 p 个(0~p-1)元素先进行逆置
  • 第二步:再将 数组 p-1位置 之后的(n-p)个元素进行逆置
  • 第三步:将 整个数组 整体进行逆置,即可得到 循环左移 p 个元素
代码
// 逆置元素算法
void Reverse(int R[] , int l , int r){// R 数组,l 左边 r 右边int i , j ,temp;for(i=l , j=r; i < j; i++,j--){temp = R[i];R[i] = R[j];R[j] = temp;}
}
// 循环左移算法
void LeftMove(int R[] , int n , int p){// r 数组 n 数组元素个数 p 循环左移个数if(p<0 || p>n){cout <<"ERROR"<<endl; }else{Reverse(r , 0 , p-1);        // 先逆置前p个Reverse(r , p , n-1);        // 再逆置后n-p个Reverse(r , 0 , n-1);        // 最后再把所有的都逆置}
}

时间复杂度分析

①:第一行 Reverse 执行频度为:1 + (p-1-0+1)/2
②:第二行 Reverse 执行频度为:1 + (n-1-p+1)/2
③:第三行 Reverse 执行频度为:1 + (n-1-0+1)/2
f(n) = 3 + n
T(n) = O(f(n)) = O(n)
空间复杂度
由于可以看到在 整个算法中,我们只定义了变量,并未定义其他数据结构,也未使用递归,所以空间复杂度是常数级别。为 O(1)

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

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

相关文章

2024年1月7日15:09:50

2024年1月7日15:09:55复习&#xff1a;我今天学了有价值的东西&#xff0c;那就是在瓦罗兰特拿到了三杀 2024年1月7日15:11:10学习了如何使用vivopad2的键盘 可以稍微用一下 2024年1月7日15:17:58 学习一个编程的题目 2024年1月7日15:31:27不用机械键盘打字效率就是比不用低…

深入理解堆(Heap):一个强大的数据结构

. 个人主页&#xff1a;晓风飞 专栏&#xff1a;数据结构|Linux|C语言 路漫漫其修远兮&#xff0c;吾将上下而求索 文章目录 前言堆的实现基本操作结构体定义初始化堆&#xff08;HeapInit&#xff09;销毁堆&#xff08;HeapDestroy&#xff09; 重要函数交换函数&#xff08;…

Talk | EMNLP 2023 最佳长论文:以标签为锚-从信息流动的视角分析上下文学习

本期为TechBeat人工智能社区第561期线上Talk。 北京时间1月4日(周四)20:00&#xff0c;北京大学博士生—王乐安的Talk已准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “以标签为锚-从信息流动的视角分析上下文学习”&#xff0c;介绍了他的团队在上下文学…

STM32深入系列02——BootLoader分析与实现

文章目录 1. STM32程序升级方法1.1 ST-Link / J-link下载1.2 ISP&#xff08;In System Programing&#xff09;1.3 IAP&#xff08;In Applicating Programing&#xff09;1.3.1 正常程序运行流程1.3.2 有IAP时程序运行流程 2. STM32 Bootloader实现2.1 方式一&#xff1a;Boo…

Qt/QML编程学习之心得:Linux下Thread线程创建(26)

GUI设计中经常为了不将界面卡死,会用到线程Thread,而作为GUI设计工具,Qt也提供了一个这样的类,即QThread。 QThread对象管理程序中的一个控制线程。线程QThread开始在run()中执行。默认情况下,run()通过调用exec()启动事件循环,并在线程内运行Qt事件循环。 也可以通过…

【第6期】使用Iview的Select组件进行远程搜索并在编辑时设置一个或多个默认值

本期简介 下拉框这个组件用的地方非常多&#xff0c;普通用法就是将数据列表一次性查询渲染&#xff0c;在列表里面直接本地搜索&#xff0c;优点是可缓存、速度快&#xff0c;但在某些场合并不适用&#xff0c;比如要在下拉框中选择一所中国的学校&#xff0c;幼儿园/小学/初…

20240107查看Android11下移远的4G模块EC20在Firefly的AIO-3399J开发板跑通时的相关服务

20240107查看Android11下移远的4G模块EC20在Firefly的AIO-3399J开发板跑通时的相关服务 2024/1/7 11:24 缘起&#xff1a;友善之臂的SDK&#xff1a;rk3399-android-11-r20211216.tar.xz可以跑通EC20&#xff0c;但是Toybrick的不行&#xff01; 同样是Andrid11&#xff0c;因此…

Python的核心知识点整理大全66(已完结撒花)

目录 D.3 忽略文件 .gitignore 注意 D.4 初始化仓库 D.5 检查状态 D.6 将文件加入到仓库中 D.7 执行提交 D.8 查看提交历史 D.9 第二次提交 hello_world.py D.10 撤销修改 hello_world.py 注意 D.11 检出以前的提交 往期快速传送门&#x1f446;&#xff08;在文…

外贸独立站建站详细操作流程一览,跨境电商卖家营销必看!

独立站是一个独立的网站&#xff0c;包括有独立的服务器&#xff0c;独立的网站程序以及网站域名。关于独立站的优势已经说了很多&#xff0c;本文就不再细谈&#xff0c;想了解的小伙伴可以自行查找之前发布的文章观看。 今天就来说说搭建独立站的详细步骤都有哪些&#xff1f…

Docker mysql 主从复制

目录 介绍&#xff1a;为什么需要进行mysql的主从复制 主从复制原理&#xff1a; ✨主从环境搭建 主从一般面试问题&#xff1a; 介绍&#xff1a;为什么需要进行mysql的主从复制 在实际的生产中&#xff0c;为了解决Mysql的单点故障已经提高MySQL的整体服务性能&#xff…

【AI视野·今日NLP 自然语言处理论文速览 第七十期】Thu, 4 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Thu, 4 Jan 2024 Totally 29 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Multilingual Instruction Tuning With Just a Pinch of Multilinguality Authors Uri Shaham, Jonathan Herzi…

3D点云平面拟合算法

假设你有一组 3D 中的 n 个点&#xff0c;并且想要为它们拟合一个平面。 在本文中&#xff0c;我将推导出一个简单的、数值稳定的方法&#xff0c;并提供它的源代码。 听起来很好玩&#xff1f; 我们开始吧&#xff01; NSDT工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO…

阿里云服务器“可用区”是什么意思?

阿里云可用区是什么意思&#xff1f;可用区是同一个地域下电力和网络相互独立的区域&#xff0c;可用区是用来搭建高可用高容灾应用架构的&#xff0c;因为可用区之间可以做到故障隔离。阿里云服务器网aliyunfuwuqi.com简单说下可用区什么是可用区及可用区的选择方法&#xff1…

简易计算器的实现(MFC)

文章目录 1.预备知识1.简单计算器的实现2.快捷键1.全局快捷键1.创建2.注销 2.局部快捷键 3.计算机内部浮点数的存储1.浮点数表示格式2.浮点数的计算3.实例 2.实验目的3.实验内容4.代码实现1.界面编写2.准备工作3.数字输入4.特殊数字输入&#xff08;指数与小数&#xff09;1.指…

计算机组成原理 I/O方式

I/O 方式 I/O方式分类: 程序查询方式。由 CPU通过程序不断查询 /O 设备是否已做好准备&#xff0c;从而控制0 设备与主机交换信息程序中断方式。只在 I/0 设备准备就绪并向 CPU发出中断请求时才予以响应。DMA方式。主存和 I/O 设备之间有一条直接数据通路&#xff0c;当主存和…

UDS诊断(ISO14229-1) 3D服务

文章目录 功能简介应用场景请求和响应1、请求2、子功能3、肯定响应4、否定响应 NRC 判断优先级顺序报文示例UDS中常用 NRC 功能简介 3D服务&#xff0c;即 WriteMemoryByAddress&#xff08;按地址写内存&#xff09;服务&#xff0c;允许客户端向服务器的一个或多个连续存储单…

开源游戏引擎:创造无限可能 | 开源专题 No.56

godotengine/godot Stars: 62.6k License: MIT Godot Engine 是一个功能强大的跨平台游戏引擎&#xff0c;可用于创建 2D 和 3D 游戏。它提供了一套全面的常见工具&#xff0c;让用户可以专注于制作游戏而不必重复造轮子。该引擎支持将游戏一键导出到多个平台上&#xff0c;包…

虾皮广告数据分析:如何进行虾皮广告数据分析以优化广告效果

虾皮&#xff08;Shopee&#xff09;作为一家知名的电商平台&#xff0c;广告数据分析是优化广告效果的关键步骤。通过对广告数据进行深入分析&#xff0c;卖家可以了解广告的表现、找出优势和不足&#xff0c;并制定更有效的广告策略。在本文中&#xff0c;我们将介绍如何进行…

Mac 16g约等于Windows多少g?

Mac 16g 内存等于 Windows 320g 内存 何为“黄金内存”&#xff1f; Mac 的内存是用黄金做的&#xff0c;而 Windows 的内存是用铁做的。 黄金的密度是 19.32 g/cm&#xff0c;而铁的密度是 7.874 g/cm。 因此&#xff0c;16g 的黄金体积是 0.082 cm&#xff0c;而 16g 的铁…

Vue3使用Pinia

1.安装 npm i pinia 2.搭建架子文件 2.1main.js import { createApp } from vue // 引入pinia import { createPinia } from piniaimport App from ./App.vue import router from ./router // 创建pinia const app createApp(App) //安装pinia app.use(createPinia())app.use(…