【算法集训之线性表篇】Day 02

文章目录

  • 题目一
    • 思路分析
    • 代码实现
    • 效果
  • 题目二
    • 思路分析
    • 代码实现
    • 效果

题目一

01.设置一个高效算法,将顺序表L的所有元素逆置,要求其空间复杂度为O(1)。

思路分析

  1. 首先,根据题目要求,空间复杂度度为O(1),则不能通过空间换时间的方式来实现低时间复杂度的算法设计。
  2. 然后,我们可以考虑使用双指针的算法思想,设置两个指针分别指向顺序表的表头元素和表尾元素,然后借助常数级的辅助空间实现元素交换。当两个指针相遇(或错过)时,推出算法。
  3. 按照上述的操作步骤,可以通过n/2次遍历元素,实现元素逆置。

代码实现

int LinearList::Question_02()
{int i = 0,j = arr.length-1;//设置两个哨兵分别指向顺序表arr的表头和表尾元素int temp; //辅助交换变量while(i < j)//结束循环条件{temp = 0;//初始化temp = arr.data[i];//交换元素arr.data[i++] = arr.data[j];arr.data[j--] = temp;}return 0;
}

效果

在这里插入图片描述

题目二

02.对长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法。该算法删除线性表中所有值为x的数据元素。

思路分析

  1. 首先,删除指定元素需要有两个步骤:找到指定元素位置、删除指定元素。
  2. 然后,查询指定元素无法使用顺序表随机存取的特性,因为事先不知道顺序表中的元素。若是查找到一个元素再删除一个元素,还需要移动n-i个元素前移一个位置,故而难以实现O(n)时间复杂度完成上述操作。
  3. 因此,我们参考快排算法的思想,将所有划分为左右两个子序列,将待删除元素放置到顺序表的后半段,而非删除元素放置到顺序表的前半段。在查找玩顺序表的所有元素后,统一删除后半段待删除元素。 此时,可以实现删除顺序表中所有指定元素,并且时间时间复杂度为O(n),空间复杂度为O(1).

代码实现

int LinearList::Question_03(int x)
{int del = 0;//记录删除元素个数int i = 0,j = arr.length-1;//设置两个指针分别指向顺序表arr的表头和表尾int temp = 0;//辅助交换变量while(i < j)//将所有需删除的元素全部交换到顺序表后部,最后统一删除{if(arr.data[i] != x)i++;if(arr.data[j] == x){del++;j--;}if(arr.data[i] == x && arr.data[j] != x){del++;temp = arr.data[i];arr.data[i++] = arr.data[j];arr.data[j--] = temp;}}cout<<"del:"<<del<<endl;arr.length -= del;return 0;
}

效果

在这里插入图片描述

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

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

相关文章

安装qt qmake assistant 错误:could not find a Qt installation of ‘‘

1、执行qmake,提示下图的错误 Command qmake not found, but can be installed with: sudo apt install qtchooser 解决方法&#xff1a; sudo apt install qtchooser 2、执行qmake,提示一下错误 qmake: could not find a Qt installation of 解决步骤&#xff1a; 步骤一&a…

媲美postman?这款国产测试工具你知道吗

没有测试数据的用例就像一盘散沙&#xff0c;跑两步就跑不动了 没有测试数据&#xff0c;所谓的功能测试和性能测试全都是无米之炊。但我发现一个蛮诡异的事情&#xff0c;就是行业内很少会有人去强调测试数据的重要性&#xff0c;甚至市面上都没有人在做测试数据这门生意。 …

【Spring】核心与设计思想

哈喽&#xff0c;哈喽&#xff0c;大家好~ 我是你们的老朋友&#xff1a;保护小周ღ 谈起Java 圈子里的框架&#xff0c;最年长最耀眼的莫过于 Spring 框架啦&#xff0c;如今已成为最流行、最广泛使用的Java开发框架之一。不知道大家有没有在使用 Spring 框架的时候思考过这…

SpringBoot整合ElasticSearch

一.【es-client】项⽬的pom.xml⽂件中&#xff0c;引⼊Spring Data Elasticsearch的启动器 <dependency> <groupId> org.springframework.boot </groupId> <artifactId> spring-boot-starter-data-elasticsearch </artifactId> </dependen…

unity+pico neo3入门教程

安装unity&#xff0c;教程如下&#xff1a;unity2021安装教程 安装pico的SDK:: https://developer-cn.pico-interactive.com/ 有入门教程&#xff1a;导入 SDK - PICO 开发者平台 注册后组织&#xff0c;创建应用learntest&#xff0c;如下 下载SDK。下载最新版&#xff…

Android CrashHandler全局异常

CrashHandler 介绍 Android 应用不可避免的会发生crash 即崩溃&#xff0c;无论程序写的多好&#xff0c;都会不可避免的发生崩溃&#xff0c;可能是由底层引起的&#xff0c;也有可能是写的代码引起的。当crash发生时&#xff0c;系统会kill掉正在执行的程序&#xff0c;现象…

Redhat7.6安装mysql5.7

环境准备&#xff1a;硬盘剩余空间最少8G,内存剩余最少2G Mysql官网下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/5.7.html 在Mysql官网下载列表中选择需要安装的版本: RedHat7.6安装MySQL5.7 安装之前&#xff0c;先要保证系统环境是干净的&#xff0c;不能存…

Docker网络管理应用

实验要求 了解Docker常用网络模式&#xff0c;掌握Docker常用网络模式的使用。主要任务是利用busybox镜像建立容器&#xff0c;容器名称为test_busybox1和test_busybox2&#xff0c;将网络模式设置为none&#xff0c;并为容器配置IP地址&#xff0c;容器test_busybox1的IP设置…

搜索二叉树

目录&#xff1a; 1.搜索二叉树的概念 2.对搜索二叉树实现插入Insert函数和InOrder中序遍历函数 3.删除 4.实现搜索二叉树的递归 5.拷贝问题 6.搜索二叉树的缺陷 ---------------------------------------------------------------------------------------------------------…

Python Websocket 控制大屏显示

场景描述&#xff1a; 在做大屏展示时&#xff0c;有这样一个需求&#xff1a;在不刷新页面的情况下&#xff0c;动态改变大屏展示内容&#xff0c;如&#xff1a;执行某个函数&#xff0c;把相关数据醒目展示&#xff0c;轮换数据显示顺序等等。比如有领导参观时&#xff0c;马…

通过阿里云函数计算FC实现音视频转码

1.进入阿里云函数计算FC页面 2.创建音视频转码应用 可以看到代码&#xff0c;看到相关的传参 3.进行测试 编辑测试参数&#xff0c;使用账号的OSS中的资源 点击测试函数进行测试 可以在OSS中看到生成的mp4格式的视频了 测试后发现函数计算可以使用 4. 接下来就是在项目中通过代…