考研中常见的算法-逆置

元素逆置

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

逆置图解

代码

// 逆置元素算法
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.hqwc.cn/news/454450.html

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

相关文章

vulnhub靶场之Thales

一.环境搭建 1.靶场描述 Description : Open your eyes and change your perspective includes 2 flags:user.txt and root.txt. Telegram: machineboy141 (for any hint) This works better with VIrtualBox rathe than VMware 2.靶场地址 https://www.vulnhub.com/entry/t…

MySQL进阶45讲【10】MySQL为什么有时候会选错索引?

1 前言 前面我们介绍过索引&#xff0c;在MySQL中一张表其实是可以支持多个索引的。但是&#xff0c;写SQL语句的时候&#xff0c;并没有主动指定使用哪个索引。也就是说&#xff0c;使用哪个索引是由MySQL来确定的。 大家有没有碰到过这种情况&#xff0c;一条本来可以执行得…

【C++】【类和对象】构造函数

1.构造函数的特性&#xff1a; 构造函数是一个特殊的成员函数&#xff0c;名字与类名相同,创建类类型对象时由编译器自动调用&#xff0c;以保证每个数据成员都有 一个合适的初始值&#xff0c;任务不是开空间创建对象&#xff0c;而是初始化对象&#xff0c;并且在对象整个生…

MFC结构体写入文件和读取

先定义一个结构体&#xff1b; struct myTxc { char c; CString name; int value; } txc; 读和写的菜单代码&#xff1b; void CjgtrwView::On32771() {// TODO: 在此添加命令处理程序代码CFile file(_T("test1.txt"), CFile::modeCreate | CFile::mod…

数据结构 归并排序详解

1.基本思想 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分治法&#xff08;Divide andConquer&#xff09;的一个非常典型的应用。 将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff0c;即先使每个子序列有序…

python推荐算法在汽车用品商城营销系统 django+flask

本论文拟采用计算机技术设计并开发的汽车营销中的设计与实践 &#xff0c;主要是为用户提供服务。使得会员可以在系统上查看汽车商品、汽车快讯、还可以咨询客服&#xff0c;管理员对信息进行统一管理&#xff0c;与此同时可以筛选出符合的信息&#xff0c;给笔者提供更符合实际…

【算法与数据结构】718、1143、1035、392、115、LeetCode最长重复子数组+最长公共子序列+不相交的线+判断子序列+不同的子序列

文章目录 一、718、最长重复子数组二、1143、最长公共子序列三、1035、不相交的线四、392、判断子序列五、115、不同的子序列六、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、718、最长重复子数组 思路分析&#xff1…

88 docker 环境下面 前端A连到后端B + 前端B连到后端A

前言 呵呵 最近出现了这样的一个问题, 我们有多个前端服务, 分别连接了对应的后端服务, 前端A -> 后端A, 前端B -> 后端B 但是 最近的时候 却会出现一种情况就是, 有些时候 前端A 连接到了 后端B, 前端B 连接到了 后端A 我们 前端服务使用 nginx 提供前端 html, js…

K8S之Namespace的介绍和使用

Namespace的理论和实操 Namespace理论说明Namespace实操创建、查看命名空间使用ResouceQuota 对Namespace做资源限额更多ResouceQuota 的使用 Namespace理论说明 命名空间定义 K8s支持多个虚拟集群&#xff0c;它们底层依赖于同一个物理集群。 这些虚拟集群被称为命名空间&…

一行命令找出 Linux 中所有真实用户

哈喽大家好&#xff0c;我是咸鱼。 接触过 Linux 的小伙伴们都知道在 Linux &#xff08;或者说类 Unix&#xff09;中&#xff0c;有三种类型的用户&#xff1a; 超级用户&#xff08;UID 为 0&#xff09;&#xff1a;即 root 用户&#xff0c;拥有最高权限。系统用户&…

【ACS】2区Top,又牛又水,IF连续八年8+,发文量爆满5000+,录用率78%

发表说 截图来源&#xff1a;LetPub 01 期刊概况 ACS Applied Materials & Interfaces 【出版社】American Chemical Society 【ISSN】1944-8244 【EISSN】1944-8252 【期刊详情】IF&#xff1a;9.0-10.0&#xff0c;JCR1区&#xff0c;中科院2区Top&#xff1b; 【检…

【C++】I/O多路转接详解(二)

在上一篇文章【C】I/O多路转接详解&#xff08;一&#xff09; 在出现EPOLL之后&#xff0c;随之而来的是两种事件处理模式的应运而生&#xff1a;Reator 和 Proactor,同步IO模型常用于Reactor模式&#xff0c;异步IO常用于Proactor. 目录 1. 服务器编程框架简介2. IO处理1. R…