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

news2024/11/15 15:49:22

元素逆置

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

逆置图解

代码

// 逆置元素算法
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.coloradmin.cn/o/1365146.html

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

相关文章

Javaweb之Mybatis的XML配置文件的详细解析

2. Mybatis的XML配置文件 Mybatis的开发有两种方式&#xff1a; 注解 XML 2.1 XML配置文件规范 使用Mybatis的注解方式&#xff0c;主要是来完成一些简单的增删改查功能。如果需要实现复杂的SQL功能&#xff0c;建议使用XML来配置映射语句&#xff0c;也就是将SQL语句写在…

陆地探测一号01组(L波段差分干涉SAR)卫星

1. 卫星简介 陆地探测一号01组A/B卫星&#xff08;LT-1A/1B&#xff09;先后于2022年1月26日、2月27日在酒泉卫星发射中心成功发射&#xff0c;又被称为L波段差分干涉SAR卫星&#xff0c;是《国家民用空间基础设施中长期发展规划&#xff08;2015-2025年&#xff09;》中首个科…

DeepPurpose 生物化学深度学习库;蛋白靶点小分子药物对接亲和力预测虚拟筛选

参考: https://blog.csdn.net/c9Yv2cf9I06K2A9E/article/details/107649770 https://github.com/kexinhuang12345/DeepPurpose ##安装 pip install DeepPurpose rdkitDeepPurpose包括: 数据: 关联TDC库下载,是同一作者开发的 https://blog.csdn.net/weixin_42357472/artic…

Windows:笔记本电脑设置休眠教程

前言 不知道大家在使用【Windows】笔记本有没有这个习惯&#xff0c;我会把他的电池选项的【休眠】设置进行打开。因为作为我们开发人员电脑一般是一周关一次机&#xff0c;有时候一个月关一次机。这时候【休眠】功能就给我们提供了一个好处&#xff0c;我们选择了【休眠】后电…

3D点云上的深度学习综述

1 Title Deep Learning for 3D Point Clouds: A Survey&#xff08;Yulan Guo; Hanyun Wang; Qingyong Hu; Hao Liu; Li Liu; Mohammed Bennamoun&#xff09;【IEEE Transactions on Pattern Analysis and Machine Intelligence 2020】 2 Conclusion Deep learning on point…

[C#]使用sdcb.paddleocr部署v4版本ocr识别模型

【官方框架地址】 https://github.com/sdcb/PaddleSharp 【算法介绍】 PaddleOCR&#xff0c;全称为PaddlePaddle OCR&#xff0c;是PaddlePaddle深度学习平台下的一款强大的光学字符识别工具。它利用深度学习技术&#xff0c;实现了高精度的文字识别&#xff0c;可以帮助用户…

Python | 基于Mediapipe框架的手势识别系统

一、项目要求 1、题目 本题着力于解决会商演示系统中的非接触式人机交互问题&#xff0c;具体而言&#xff0c;其核心问题就是通过计算机视觉技术实现对基于视频流的手势动作进行实时检测和识别。通过摄像头采集并识别控制者连续的手势动作&#xff0c;完成包括点击、平移、缩放…

Opencv实验合集——实验七:二维码和条形码匹配

1.概念 二维码&#xff08;QR码&#xff09; 概念&#xff1a; 二维码是一种矩阵式的二维条码&#xff0c;由黑白方块组成&#xff0c;可以存储大量的信息&#xff0c;包括文本、链接、数字等。QR码的编码方式是在矩阵中通过不同的黑白方块组合表示不同的信息。 特点&#xf…

【读书笔记】《白帽子讲web安全》跨站脚本攻击

目录 前言&#xff1a; 第二篇 客户端脚本安全 第3章 跨站脚本攻击&#xff08;XSS&#xff09; 3.1XSS简介 3.2XSS攻击进阶 3.2.1初探XSS Payload 3.2.2强大的XSS Payload 3.2.2.1 构造GET与POST请求 3.2.2.2XSS钓鱼 3.2.2.3识别用户浏览器 3.2.2.4识别用户安装的软…

【linux学习】重定向

目录 重定向标准输出、标准输入和标准错误标准输出重定向标准错误重定向将标准输出和标准错误重定向到同一个文件处理不想要的输出标准输入重定向 管道过滤器uniq-报告或者忽略文件中重复的行wc-打印行数、字数和字节数grep-打印匹配行head/tail 打印文件的开头部分/结尾部分te…

嵌入式系统习题(考试相关)

文章目录 上一篇嵌入式系统概述ARM技术概述ARM指令Thumb指令集ARM程序设计 上一篇 嵌入式系统复习–基于ARM的嵌入式程序设计 嵌入式系统概述 嵌入式系统中常用的通信接口包括哪些&#xff1f; RS-232C串行通信接口&#xff0c;RS-422串行通信接口&#xff0c;RS-485串行通信…

【APACHE】的认识和基础配置参数

#主页传送:江南的江 #每日鸡汤&#xff1a;人生没有如果和假设&#xff0c;只有后果和结果。生活有进有退&#xff0c;输什么也不能输心情。生活简单就是迷人的&#xff0c;学会简单其实就是不简单。要学会平静地接受现实&#xff0c;学会对自己说声顺其自然&#xff0c;学会坦…

基于实时Linux+FPGA实现NI CompactRIO系统详解

利用集成的软件工具链&#xff0c;结合信号调理I/O模块&#xff0c;轻松构建和部署实时应用程序。 什么是CompactRIO&#xff1f; CompactRIO系统提供了高处理性能、传感器专用I/O和紧密集成的软件工具&#xff0c;使其成为工业物联网、监测和控制应用的理想之选。实时处理器提…

leetcode——杨辉三角

https://leetcode.cn/problems/pascals-triangle/ 杨辉三角&#xff1a; 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 核心思想&#xff1a;找出杨辉三角的规律&#xff0c;发…

如何用UE5 的小白人替换成自己的 metahumen 数字人

1、用QuixelBridge 插件导入制作好的metahumen数字人 2、创建项目时如有选择第三人称游戏&#xff0c;在内容目录中找到第三人称游戏小白人的蓝图类&#xff0c;对其进行复制一个&#xff0c;重命名&#xff0c;我这里命名为BP_METAHUMEN&#xff0c; 并移到Metahumen目录下方便…

python统计分析——箱线图(plt.boxplot)

参考资料&#xff1a;用python动手学统计学 使用matplotlib.pyplot.boxplot()函数绘制箱线图 import numpy as np import pandas as pd from matplotlib import pyplot as pltdata_set1np.array([2,3,3,4,4,4,4,5,5,6]) data_set2np.array([[2,3,3,4,4,4,4,5,5,6],[5,6,6,7,7…

【AI视野·今日Sound 声学论文速览 第四十一期】Thu, 4 Jan 2024

AI视野今日CS.Sound 声学论文速览 Thu, 4 Jan 2024 Totally 8 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Sound Papers Multichannel blind speech source separation with a disjoint constraint source model Authors Jianyu Wang, Shanzheng Guan多通道卷积…

ArcGIS制图技巧总结

Part 1 制图综述 1.1 制图的目的 随着GIS在各行各业的深入应用&#xff0c;各信息化部门和生产单位都逐渐建立起自己的GIS的应用&#xff0c;同时积累了大量的地理数据。随着应用深度和广度的推进&#xff0c;针对数据建立专题应用越来越迫切&#xff0c;对行业专题制图的需…

XCode Build报错

XCode Build时报以下错误 B/BL out of range 143266484 (max /-128MB) 错误提示表明生成的机器代码太大&#xff0c;超出了限制 需要在XCode工程中添加宏定义&#xff0c;使得生成的可执行文件超过限制 步骤&#xff1a; 在项目设置页面中&#xff0c;选择 “Build Settings…

爆肝整理,接口测试+为什么要做接口测试总结,策底贯通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、什么是接口测试…