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

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

元素逆置

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

逆置图解

代码

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

相关文章:

  • 【MATLAB】数豆子
  • QT C++中调用python脚本时,import第三方库失败问题解决
  • 【AI视野·今日Robot 机器人论文速览 第七十期】Thu, 4 Jan 2024
  • Flutter中的布局组件介绍及使用
  • 【面试高频算法解析】算法练习2 回溯(Backtracking)
  • 认识Git
  • @RequestParam,@RequestBody和@PathVariable 区别
  • vue3组件传参
  • React16源码: React中创建更新的方式及ReactDOM.render的源码实现
  • CentOS 7 系列默认的网卡接口名称
  • 多文件上传
  • 2024.1.7力扣每日一题——赎金信
  • C#中List<T>底层原理剖析
  • Leetcode 3003. Maximize the Number of Partitions After Operations
  • MySQL第一讲:MySQL知识体系详解(P6精通)
  • 逻辑回归简单案例分析--鸢尾花数据集
  • Python print 高阶玩法
  • Wpf 使用 Prism 实战开发Day09
  • 网络端口(包括TCP端口和UDP端口)的作用、定义、分类,以及在视频监控和流媒体通信中的定义
  • flink如何写入es
  • Java、Python、C++和C#的界面开发框架和工具的重新介绍
  • Java二叉树的遍历以及最大深度问题
  • Apollo 9.0搭建问题记录
  • 【心得】PHP文件包含高级利用攻击面个人笔记
  • [scala] 列表常见用法
  • python 使用urllib3发起post请求,携带json参数
  • 深入理解堆(Heap):一个强大的数据结构
  • 抖音在线查权重系统源码,附带查询接口
  • Spring Framework和SpringBoot的区别
  • 2024--Django平台开发-Django知识点(三)