【2015年数据结构真题】
用单链表保存m个整数,结点的结构为 [data] [link],且|data|<=n(n为正整数)。现要求设计一个时问复杂度尽可能高效的算法,对于链表中 data 的绝对值相等的结点,仅保留第一次出现的结点而删除其余绝对值相等的结点。例如, 若给定的单链表 head 如下:则删除结点后的 head 为
- 给出算法的基本设计思想。
- 使用采用C或C++语言描述算法, 给出单链表结点的数据类型定义。
- 根据设计思想, 采用C或C++语言描述算法,关键之处给出注释。
- 说明你所设计算法的时间复杂度和空间算杂度。
方法一:暴力求解
定义两个指针,p指向21,q指向-15,p每走一步,q就走剩下所有元素并比较,相等就删除
时间:O(m²) 空间:O(1)
typedef struct Node
{int data; //该节点权值struct Node *link; //下一个节点
} Node;void ans(Node *HEAD)
{Node *p = HEAD->link; //外层遍历节点pNode *q, *r; //q是r的前一个节点while (p != NULL){q = p;if (abs(r->data) == abs(p->data)) //r表示待比较节点{q->link = r->link;free(r);}else //不相同时才修改qq = q->link;}p = p->link;
}
方法二
算法的基本思想:
算法的核心思想是用空间换时间。使用辅助数组记录链表中已出现的
数值,从而只需对链表进行一趟扫描。
因为|data|≤n,故辅助数组 temp 的大小至少为 n+1,各元素的初值均
0。依次扫描链表中的各结点,同时检查 temp[|data|]的值,如果为 0,则
保留该结点,并令++temp[|data|];否则,将该结点从链表中删除。
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>typedef struct ListNode
{int data; //该节点权值struct Node *pNext; //下一个节点
} Node,*PNODE;//筛选链表中绝对值重复的元素
void FiltrateRep(PNODE L,int len)
{int temp[len];memset(temp,0,sizeof(int)*len);//初始化位0PNODE pre,p;pre=L;while(pre->pNext!=NULL){p=pre->pNext;if(p!=NULL){if(temp[abs(p->data)]<1){++temp[abs(p->data)];//辅助数组对应元素位置+1pre=p;}else{//如果temp[p->data]大于1,正在判断的元素,是重复的元素,需要删除pre->pNext=p->pNext;free(p);}}}
}
相关文章:

【2015年数据结构真题】
用单链表保存m个整数,结点的结构为 [data] [link],且|data|<n(n为正整数)。现要求设计一个时问复杂度尽可能高效的算法,对于链表中 data 的绝对值相等的结点,仅保留第一次出现的结点而删除其余绝对值相等的结点。例如ÿ…...

vxe表格行拖拽
安装第三方插件 import Sortable from sortablejs 可以跟后端商议表格添加seq 顺序, 按照循序排序 secondInput 调用 修改接口api 然后重新获取数据 //在get 请求之后 使用nextTick 使用 const rowDrop () > {nextTick(() > {let xTable2 planDat…...

Linux之基本指令操作
1、whoami whoami:查看当前账号是谁 2、who who:查看当前我的系统当中有哪些用户,当前有哪些人登录了我的机器 3、 pwd pwd:查看我当前所处的目录,就好比Windows下的路径 4、ls ls:查看当前目录下的文件信…...

海康设备、LiveNVR等通过GB35114国密协议对接到LiveGBS GB28181/GB35114平台的详细操作说明
一、LiveNVR通过GB35114接入LiveGBS 1.1 开启LiveGBS 35114功能 信令服务livecms.ini配置文件中[sip]增加一行gm1 启动LiveCMS 1.2 生成设备端证书 我们用LiveNVR做为设备端向LiveGBS注册,这里先生成LiveNVR的设备证书,并将LiveNVR的设备证书给LiveGB…...

BUUCTF 面具下的flag 1
BUUCTF:https://buuoj.cn/challenges 题目描述: 下载附件,得到一张.jpg图片。 密文: 解题思路: 1、将图片放到Kali中,使用binwalk检测出隐藏zip包。 使用foremost提取zip压缩包到output目录下 解压zip压缩包&…...

ArcGIS实现矢量区域内所有要素的统计计算
1、任务需求:统计全球各国所有一级行政区相关属性的总和。 (1)有一个全球一级行政区的矢量图,包含以下属性(洪灾相关属性 province.shp) (2)需要按照国家来统计各个国家各属性的总值…...

3.4-初识Container
常用的docker container命令: 1、基于image创建docker container命令: docker run lvdapiaoliang/hello-docker 2、列举当前本地正在运行的container容器命令: docker container ls 3、列举当前本地所有的container容器命令(包括正在运行的和…...

壹基金爱泽瑞金 安全家园物料配送忙
11月9日到10日,瑞金赋能公益陆续收到壹基金、阿里巴巴公益爱心网友捐赠的社区志愿者救援队队伍物资,马不停蹄地把物资配送到河背街社区、金都社区和沙洲坝镇等项目点,扎实稳妥推进项目有序执行。 在这次物资配送中,志愿者冒雨前行…...

arcgis--二维建筑面的三维显示设置
1、打开ArcScene软件,导入数据,如下: 2、 对建筑面进行拉伸。双击建筑物面图层,打开属性表,选择【拉伸】选项卡,参数设置如下: 显示结果如下:...

Maven 插件统一修改聚合工程项目版本号
目录 引言直接修改 pom.xml 的版本号的问题Maven 插件修改版本号开源项目微服务商城项目前后端分离项目 引言 在Maven项目中,我们通常有两种常见的方式来修改版本号:直接在pom.xml文件中手动编辑和利用Maven插件进行版本号调整。 本文将比较这两种修改…...

主从复制和读写分离
MySQL 主从复制和读写分离: 主从复制:主MySQL上的数据,新增,修改库,表,表里的数据,都会同步到从MySQL上。 MySQL的主从复制的模式:(面试题) 1,异…...

Redis模块的高级使用方式
Redis 模块是Redis的高级功能,允许我们实现特定的自定义数据类型。本质上,模块是一个动态库,可以在启动时或根据命令按需加载到 Redis 中 MODULE LOAD 。模块可以用多种语言编写,包括 C 和 Rust。 我们自己使用 Redis 模块实现新…...

Failed to restart network.service: Unit network.service not found.
执行systemctl restart network命令,报错Failed to restart network.service: Unit network.service not found. 执行 yum install network-scripts命令 再次执行,正常...

wiki.js一个开源知识库系统
1 什么是wiki wiki.js是一个开源Wiki应用程序,官网介绍为: A modern, lightweight and powerful wiki app built on NodeJS 访问Github:github 访问Wike:js.wiki 省流总结 开源知识库平台,和语雀有一样的功能&…...

关于Java抽象类和接口的总结和一点个人的看法
꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ ა 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转载还请通知˶⍤⃝˶个人主页&am…...

vue中ref的用法
vue中ref的用法 在项目中使用ref时有时候直接取值,有时候返回的却是一个数组,不知其中缘由,后查了一下ref用法,所以总结一下. 1.绑定在dom元素上时,用起来与id差不多,通过this.$refs来调用: <div id"passCarEchart" ref"passCarEch…...

【华为OD题库-012】模拟消息队列-Java
题目 让我们来模拟一个消息队列的运作,有一个发布者和若干消费者 ,发布者会在给定的时刻向消息队列发送消息。>若此时消息队列有消费者订阅,这个消息会被发送到订阅的消费者中优先级最高(输入中消费者按优先级升序排列)的一个。>若此时…...

Android修行手册 - 阴影效果的几种实现以及一些特别注意点
点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列点击跳转>ChatGPT和AIGC 👉关于作者 专…...

【星海出品】SDN neutron (五) openvswitch
1、ovs-vswitchd组件是交换机的主要模块,运行在用户态,其主要负责基本的转发逻辑、地址学习、外部物理端口绑定等。还可以运用OVS自带的ovs-ofctl工具采用openflow协议对交换机进行远程配置和管理。 2、ovsdb-server组件是存储OVS的网桥等配置、日志以及…...

springboot整合vue2实现简单的新增删除,整合ECharts实现图表渲染
先看效果图: 1.后端接口 // 查询所有商品信息 // CrossOrigin(origins "*")RequestMapping("/list1")ResponseBodypublic List<Goodsinfo> list1(){List<Goodsinfo> list goodsService.list();return list;}// 删除 // …...

<蓝桥杯软件赛>零基础备赛20周--第5周--杂题-2
报名明年4月蓝桥杯软件赛的同学们,如果你是大一零基础,目前懵懂中,不知该怎么办,可以看看本博客系列:备赛20周合集 20周的完整安排请点击:20周计划 每周发1个博客,共20周(读者可以按…...

数据结构哈希表(散列)Hash,手写实现(图文推导)
目录 一、介绍 二、哈希数据结构 三、✍️实现哈希散列 1. 哈希碰撞💥 2. 拉链寻址⛓️ 3. 开放寻址⏩ 4. 合并散列 一、介绍 哈希表,也被称为散列表,是一种重要的数据结构。它通过将关键字映射到一个表中的位置来直接访问记录&#…...

【嵌入式设计】Main Memory:SPM 便签存储器 | 缓存锁定 | 读取 DRAM 内存 | DREM 猝发(Brust)
目录 0x00 便签存储器(Scratchpad memory) 0x01 缓存锁定(Cache lockdown) 0x02 读取 DRAM 内存 0x03 DREM Banking 0x04 DRAM 猝发(DRAM Burst) 0x00 便签存储器(Scratchpad memory&#…...

dameng数据库数据id decimal类型,精度丢失
问题处理 这一次也是精度丢失,但是问题呢还是不一样,这一次所有的id都被加一了,只有id字段被加一,还有的查询查出来封装成对象之后对象的id字段被减一了,数据库id字段使用的decimal(20,6)&…...

python图神经网络,注意力机制、Transformer模型、目标检测算法、强化学习等
近年来,伴随着以卷积神经网络(CNN)为代表的深度学习的快速发展,人工智能迈入了第三次发展浪潮,AI技术在各个领域中的应用越来越广泛 本文重点为:注意力机制、Transformer模型(BERT、GPT-1/2/3/…...

安装包 amd,amd64, arm,arm64 都有什么区别
现在的安装包也不省心,有各种版本都不知道怎么选。 根据你安装的环境配置。 amd: 32位X86 amd64: 64位X86 arm: 32位ARM arm64: 64位ARM amd64是X86架构的CPU,64位版。amd64又叫X86_64。主流的桌面PC&am…...

Ansible 企业实战详解
一、ansible简介1. ansible是什么2.ansible的特点ansible的架构图 二、ansible 任务执行1、ansible 任务执行模式2、ansible 执行流程3、ansible 命令执行过程 二 .Ansible安装部署1.yum安装2.ansible 程序结构3、ansible配置文件查找顺序4、ansible配置文件5.ansible自动化配置…...

云贝教育 |【技术文章】pg缓存插件介绍
一、pg_buffercache 主要作用是查看pg的共享池中缓存的对象信息 1.1 创建扩展 postgres# create extension pg_buffercache; CREATE EXTENSION 1.2 查看视图pg_buffercache postgres# \d pg_buffercacheView "public.pg_buffercache"Column | Type | Co…...

Kohana框架的安装及部署
Kohana框架的安装及部署 tipsKohana安装以及部署1、重要文件作用说明1.1 /index.php1.2 /application/bootstrap.php 2、项目结构3、路由配置3.1、隐藏项目入口的路由3.2、配置默认路由3.3、配置自定义的路由(Controller目录下的控制器)3.4、配置自定义的路由(Controller/direc…...

无重复字符的最长子串 Golang leecode_3
刚开始的思路,先不管效率,跑出来再说,然后再进行优化。然后就有了下面的暴力代码: func lengthOfLongestSubstring(s string) int {// count 用来记录当前最长子串长度var count int// flag 用来对下面两个 if 语句分流var flag …...