顺序表-数组逆置

今天开始进入算法环节,从头开始手撸各种算法,这里使用C语言,后续我会补充Java版的。

大家都知道顺序表是一个线性表,那么他就具有线性表的特性,那就是随机存取,它的逻辑地址跟物理地址都是相同的,都可以用下标解决,Java的话有很多封装工具可以使用,更方便一些,对于C可能要麻烦一些,但是要想打好坚实的基础我们不挑语言,而且C的执行速度是优于Java的。

正品开始啦!!!

第一道题(开胃菜):有一个数组[1,2,3,4,5,6,7] 变成 [7,6,5,4,3,2,1]很简单吧,我相信不会有人不会的,Java的话只需要调用一个方法就搞定了,自行百度一下,数组逆置的函数是什么

C语言:

#include <stdio.h>

/**
 * 顺序表算法1:数组倒置(部分)
 * 思路:对位交换
 * 复杂度分析:时间O(n/2) --> O(n)、空间O(1)
 * 1,2,3,4,5,6,7  from,to,i = 0,temp:暂存变量
*/
void Reverse(int R[],int from,int to){
    int temp;
    for (int i = 0; i < (to - from + 1)/2; i++) {
        temp = R[from+i];
        R[from+i] = R[to-i];
        R[to-i] = temp;
    }
}

/**
 * 数组遍历打印
 * @param R
 */
void printf_arr(int R[], int length){
    for (int i = 0; i < length; ++i){
        printf("%d ", R[i]);
    }
}
/**
 * 顺序表
 * @return
 */

int main(void) {
    // 1、数组倒置
    int R[] = {1,2,3,4,5,6,7};
    Reverse(R,1,5);
    printf_arr(R,sizeof(R) / sizeof(R[0]));
    return 0;
}

我这里采用的方法是对位交换,不理解?那我给大家画个图就理解了,图示如下:

图画的不是很形象将就看一下,相同颜色对调位置是不是就是我们想要的结果了,那么我们的循环次数就是 

 [(目标元素下标)-(开始元素下标)+1]/2

上面给出的代码其实是可以实现数组部分元素逆置的。

性能分析:时间复杂度方面我们只遍历了一次数组,循环次数是(to - from + 1)/2就是上面给出的公式。空间复杂度我们借助了一个temp变量做承接所以空间复杂度为O(1)

时间复杂度:O(n)

空间复杂度:O(1)

今天的主菜开始:

听题:

设将n(n>1)个整数存放到一维数组R中。设计一个在时间和空间两方面都尽可能高效的算法.将R中保存的序列循环左移p(0<p<n)个位置,即将R中的数据由(X0,X1..n-1)变为(Xp,Xo+1,...,Xn-1,X0,X1,...,Xp-1)

题解:这道题看起来就高大上很多了,乍一看挺懵的,我来分析一下,emmm,无非就是将一个数组[1,2,3,4,5,6,7]变成[3,4,5,6,7,1,2]其实就是把后半部分往前提了,暴力解其实不难三个遍历也能搞定,不过用暴力解他的空间复杂度会是O(n),那可不行,忍不了,其实仔细看就能发现,这道题一定是跟上面那道题有关系的,就是方法不是很好想,我用的方法其实就是调用了三遍前面的代码就实现了。

上代码:

/**
 * 顺序表
 * @return
 */

int main(void) {
    int R[] = {1,2,3,4,5,6,7};
    // 2、原地逆置:原题:设将n(n>1)个整数存放到一维数组R中。设计一个在时间和空间两方面都尽可能高效的算法.将R中保存的序列循环左移p(0<p<n)个位置,即将R中的数据由(X0,X1..n-1)变为(Xp,Xo+1,...,Xn-1,X0,X1,...,Xp-1)
    Reverse(R,0,1);
    Reverse(R,2,6);
    Reverse(R,0,6);
    printf_arr(R,sizeof(R) / sizeof(R[0]));
    return 0;
}

把数组逆置的main方法替换就OK了。

性能分析:由于我们没有做代码变动,所以时间跟空间复杂度跟数组逆置是完全一样的。

时间复杂度:O(n)

空间复杂度:O(1)

ok!!!今天分享就到这,后续还会继续更新,留个小关注吧!!!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一个简单的 uas_send_bye.xml for SIPp

<?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE scenario SYSTEM "sipp.dtd"> <scenario name"iinv-o200-obye.xml -- wjd 2014"><recv request"INVITE" rrs"true"/><send>&l…

单片机串口和电脑串口连接

单片机串口和电脑串口连接&#xff1a; 先将MCU的TTL电平转换为RS232电平&#xff0c;才可以和电脑的串口DB9相连接。见下图所示&#xff1a; 翻看自己以前记录的笔记&#xff0c;真是初级到极点了。

Java Lock Semaphore 总结

前言 相关系列 《Java & Lock & 目录》&#xff08;持续更新&#xff09;《Java & Lock & Semaphore & 源码》&#xff08;学习过程/多有漏误/仅作参考/不再更新&#xff09;《Java & Lock & Semaphore & 总结》&#xff08;学习总结/最新最准…

文案语音图片视频管理分析系统-视频矩阵

文案语音图片视频管理分析系统-视频矩阵 1.产品介绍 产品介绍方案 产品名称&#xff1a; 智驭视频矩阵深度分析系统&#xff08;SmartVMatrix&#xff09; 主要功能&#xff1a; 深度学习驱动的视频内容分析多源视频整合与智能分类高效视频检索与编辑实时视频监控与异常预警…

C#判断点是否在多边形内

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff01;人工智能学习网站 前言&#xff1a; 大家好&#xff0c;我是上位机马工&#xff0c;硕士毕业4年年入40万&#xff0c;目前在一家自动化公司担任…

【SQL Server】解决因使用 varchar 类型存储 Unicode 字符串导致的中文显示乱码问题

问题描述 导入 SQL 到 SQL Server 数据库后&#xff0c;存在部分列的中文显示异常的问题。 原因分析 观察发现显示异常的字段的数据类型是 varchar&#xff0c;而显示正常的字段的数据类型是 nvarchar。 而且&#xff0c;SQL 文件中所有字符串前面都带有 N 的前缀。 在 SQL 中…

su user更换用户后无法打开图形屏幕Cannot open your terminal ‘/dev/pts/0‘ 解决办法

我在docker内使用了su john更换了用户&#xff0c;执行petalinux-config -c kernel时打不开图形屏幕窗口&#xff0c;需要执行命令script /dev/null 进入docker和配置状态的所有命令行命令如下&#xff1a; johnjohn-hp:~/zynq$ ./docker_ubuntu16.sh rootjohn-hp:/home/john/…

【永中软件-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

Oracle自动处理表空间不足脚本

关注过我的朋友们应该知道我分享过一些常用的监控脚本&#xff0c;其中最常用的就是监控表空间使用率的脚本&#xff0c;具体可以参考如下链接​&#xff1b; oracle常用监控脚本&#xff08;纯干货&#xff0c;没有EMCC,ZABBIX也不怕&#xff09;_oracle 监控及日常处理脚本-…

如何用示波器测实时时钟信号和主时钟信号

使用示波器测量实时时钟信号&#xff08;RTC&#xff09;和主时钟信号&#xff08;Main Clock Signal&#xff09;的步骤如下&#xff1a; 1. 准备工作 选择合适的探头&#xff1a;使用高品质的示波器探头&#xff0c;通常10X衰减探头适合大部分情况。校准探头&#xff1a;确…

NVR设备ONVIF接入平台EasyCVR视频融合平台智慧小区视频监控系统建设方案

一、方案背景 智慧小区构成了“平安城市”建设的基石。随着社会的进步&#xff0c;社区安全问题逐渐成为公众关注的热点。诸如高空抛物、乱丢垃圾、破坏车辆、入室盗窃等不文明行为和违法行为频繁出现。目前&#xff0c;许多小区的物业管理和安全防护系统仍然较为简单和陈旧&a…

数据分析-38-关于互联网企业黑名单的探索

论文辅导或算法学习可以滴滴我 文章目录 项目介绍表和字典描述1、读取数据2、查看黑名单公司主要来自哪些城市3、查看黑榜公司分布城市4、存在的问题5、查看存在问题分类 项目介绍 在数字化的时代&#xff0c;信息的力量不言而喻&#xff0c;尤其当我们面临职业选择时。是一个…

论文略读:Can We Edit Factual Knowledge by In-Context Learning?

EMNLP 2023 第一个探索in-context learning在语言模型知识编辑方便的效果 传统的知识编辑方法通过在包含特定知识的文本上进行微调来改进 LLMs 随着模型规模的增加&#xff0c;这些基于梯度的方法会带来巨大的计算成本->论文提出了上下文知识编辑&#xff08;IKE&#xff0…

鼠标事件与webGl坐标系

弯道超车&#xff1a; 盒子模型&#xff1a; 又称CSS 盒模型&#xff0c;包含content、padding、border 和 margin 四个部分。 clientWidth、scrollWidth、offsetWidth之间的区别&#xff1a; offsetWidth&#xff1a;包含内容、padding、border 和滚动条的宽度&#xff08;如果…

Camp4-L0:Linux 前置基础

书生浦语大模型实战营Camp4-L0:Linux前置基础 教程地址&#xff1a;https://github.com/InternLM/Tutorial/tree/camp4/docs/L0/linux任务地址&#xff1a;https://github.com/InternLM/Tutorial/blob/camp4/docs/L0/linux/task.md 任务描述完成所需时间闯关任务完成SSH连接与…

「虚拟现实中的心理咨询:探索心灵世界的新方法」

内容概要 当我们想到虚拟现实时&#xff0c;很多人会联想到游戏或娱乐&#xff0c;但如今其在心理咨询领域的应用正在逐渐崭露头角。传统的心理咨询方式常常局限在咨询室内&#xff0c;面临着空间和情感隔阂的问题。然而&#xff0c;沉浸式环境的出现&#xff0c;使得治疗者能…

python:ADB通过包名打开应用

一、依赖库 os 二、命令 1.这是查看设备中所有应用包名的最简单方法。只需在命令行中输入以下命令&#xff1a; adb shell pm list packages 2.打印启动的程序包名 adb shell am monitor回车&#xff0c;然后启动你想要获取包名的那个应用&#xff0c;即可获得 3.查看正在运…

【面试每日一题之CSS】2、line-height和heigh区别

line-height和heigh区别 前言1、试题分析讲解2、代码模块眼见为实3、效果对比 前言 随着就业形式的压力&#xff0c;很多人都可能面临着待业&#xff0c;再就业的情况&#xff0c;那么在乾坤未定之际好好的丰实自己的羽翼吧&#xff0c;没有啥比壮大自己重要&#xff0c;所以我…

ICLR25初审稿按照自己喜好整理自己需要的(逐渐更新)

ICLR25初审稿按照自己喜好整理自己需要的&#xff08;逐渐更新) 光谱GNN合集&#xff08;10.29初筛&#xff09; 数据集 大类数据集名称pygcora &#xff0c;citeseer &#xff0c;pubmed&#xff0c;cornell&#xff0c;texas&#xff0c;wisconsin,flickr,reddit,actor,ph…

QT实时显示日志内容

性能有待提高&#xff1b; 能够读取指定目录下的日志文件&#xff0c;显示在下拉框中。 选择某一个日志之后&#xff0c;点击获取数据按钮&#xff0c;能够实时刷新日志内容。 但是每次刷新都会对整个文件进行读取&#xff0c;文本框重新加载文本。效率很低&#xff0c;影响性能…