【2015年数据结构真题】

news2024/10/7 2:25:36

用单链表保存m个整数,结点的结构为 [data] [link],且|data|<=n(n为正整数)。现要求设计一个时问复杂度尽可能高效的算法,对于链表中 data 的绝对值相等的结点,仅保留第一次出现的结点而删除其余绝对值相等的结点。例如, 若给定的单链表 head 如下:则删除结点后的 head 为

image.png

  1. 给出算法的基本设计思想。
  2. 使用采用C或C++语言描述算法, 给出单链表结点的数据类型定义。
  3. 根据设计思想, 采用C或C++语言描述算法,关键之处给出注释。
  4. 说明你所设计算法的时间复杂度和空间算杂度。

方法一:暴力求解

定义两个指针,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; //外层遍历节点p
    Node *q, *r; //q是r的前一个节点
    while (p != NULL)
    {
        q = p;
        if (abs(r->data) == abs(p->data)) //r表示待比较节点
        {
            q->link = r->link;
            free(r);
        }
        else   //不相同时才修改q
            q = 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);//初始化位0

    PNODE pre,p;
    pre=L;
    while(pre->pNext!=NULL){
        p=pre->pNext;
        if(p!=NULL){
            if(temp[abs(p->data)]<1){
                ++temp[abs(p->data)];//辅助数组对应元素位置+1
                pre=p;
            }
            else{//如果temp[p->data]大于1,正在判断的元素,是重复的元素,需要删除
                pre->pNext=p->pNext;
                free(p);
            }
        }
    }
}


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

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

相关文章

HackTheBox-Starting Point--Tier 2---Unified

文章目录 一 Unified 测试过程1.1 打点1.2 权限获取1.3 权限提升 二 题目 一 Unified 测试过程 1.1 打点 1.端口扫描 nmap -sV -sC 2.访问8080端口 页面跳转到&#xff1a;https://10.129.96.149:8443/manage/account/login?redirect%2Fmanage   观察到版本号为unifi 6.4.5…

Java GUI小程序之图片浏览器

以下是一个简单的图片浏览器示例代码&#xff0c;它包含了图片放大缩小、拖拽、上一张/下一张查看等功能。你可以根据它进行扩展&#xff0c;提高用户体验。 import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.e…

Copliot:让你一秒变身网页达人的神奇助手

Copliot&#xff1a;一款能够帮助你快速理解网页内容的智能助手 你是否有过这样的经历&#xff0c;当你浏览网页时&#xff0c;遇到了一些你不太了解的内容&#xff0c;比如一些专业术语&#xff0c;一些复杂的概念&#xff0c;或者一些有趣的话题&#xff1f;你是否想要快速地…

【深度学习 | 核心概念】那些深度学习路上必经的核心概念,确定不来看看? (六)

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

Android问题笔记四十五:解决SeekBar操作thumb周围产生的圆形阴影/灰色阴影/白色圆圈的解决办法

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列点击跳转>ChatGPT和AIGC &#x1f449;关于作者 专…

登上CMMLU性能评测榜单第一 四大维度解码夸克自研大模型

11月14日&#xff0c;拥有千亿参数的夸克自研大模型正式发布&#xff0c;立刻占据CMMLU榜单第一名。夸克大模型将应用于通用搜索、医疗健康、教育学习、职场办公等多个场景。性能方面&#xff0c;其整体水平已经超过GPT-3.5&#xff0c;其中在写作、考试等部分场景中可以超过GP…

Shopee可以绑定大陆银行卡吗?Shopee收款方式选哪种?——站斧浏览器

shopee可以绑定大陆银行卡吗&#xff1f; 对于中国大陆的卖家而言&#xff0c;他们希望能够在Shopee上绑定自己的大陆银行卡&#xff0c;方便进行交易和收款。然而&#xff0c;目前的情况是Shopee并不支持直接绑定大陆银行卡。这主要是因为Shopee在中国大陆并不是主要运营的电…

成本2元开发游戏,最快3分钟完成!全程都是AI智能体“打工”,大模型加持的那种

金磊 发自 凹非寺 量子位 | 公众号 QbitAI 家人们&#xff0c;OpenAI前脚刚发布自定义GPT&#xff0c;让人人都能搞开发&#xff1b;后脚国内一家大模型初创公司也搞了个产品&#xff0c;堪称重新定义开发——让AI智能体们协作起来&#xff01; 只需一句话&#xff0c;最快3分…

ubuntu 18.04安裝QT+PCL+VTK+Opencv

资源 qt5.14.1:qt5.14.1.run opencv4.5.5:opecv4.5.5压缩包 1.国内换中科大源&#xff0c;加快下载速度 cd /etc/apt/ sudo gedit sources.list 替换成如下内容 deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse deb-src https://mirro…

kubernetes集群编排(11)

目录 k8s etcd 备份 恢复 k8s etcd [rootk8s2 etcd]# scp -r /etc/kubernetes/pki/etcd/ k8s1: 备份 从镜像中拷贝etcdctl二进制命令 [rootk8s2 ~]# docker run -it --rm reg.westos.org/k8s/etcd:3.5.4-0 sh输入ctrlpq快捷键&#xff0c;把容器打入后台 获取容器id [rootk8s2 …

数据分析场景下,企业如何做好大模型选型和落地?

在数据驱动的数字化时代&#xff0c;有效的数据分析已成为企业成功的关键因素。而随着大模型带来能力突破&#xff0c;让AI与数据分析相互结合&#xff0c;使分析结果更好支撑业务&#xff0c;促进企业内部数据价值释放&#xff0c;成为了当下企业用户尤为关注的话题。 如何按照…

区域入侵AI算法如何应用在工地场景,保卫工地施工安全?

在工地、厂区等施工场所&#xff0c;安全保障是必不可少的&#xff0c;特别是在人工智能技术日益成熟的今天&#xff0c;如何利用旭帆科技AI智能视频中的区域入侵算法助力智慧工地、保障工地安全呢&#xff1f; 1、建筑物周界安全 TSINGSEE青犀区域入侵算法可以用于监控建筑物…

音画欣赏|《纯洁的梦乡》

《纯洁的梦乡》 80x60cm 陈可之2021年绘 题龙阳县青草湖 【元】唐温如 西风吹老洞庭波&#xff0c;一夜湘君白发多。 醉后不知天在水&#xff0c;满船清梦压星河。 车遥遥篇 【宋】范成大 车遥遥&#xff0c;马憧憧。 君游东山东复东&#xff0c;安得奋飞逐西风。 愿我如星…

SARAS多步TD目标算法

SARAS多步TD目标算法 代码仓库:https://github.com/daiyizheng/DL/tree/master/09-rl SARSA算法是on-policy 时序差分 在迭代的时候&#xff0c;我们基于 ϵ \epsilon ϵ-贪婪法在当前状态 S t S_t St​ 选择一个动作 A t A_t At​ &#xff0c;然后会进入到下一个状态 S…

从HTTP到Tomcat:揭秘Web应用的底层协议与高性能容器

WEB服务器 1. HTTP协议1.1 HTTP-概述1.1.1 介绍1.2.2 特点 2.2 HTTP-请求协议2.3 HTTP-响应协议2.3.1 格式介绍2.3.2 响应状态码 2.4 HTTP-协议解析 2. WEB服务器-Tomcat2.1 简介2.1.1 服务器概述2.1.2 Web服务器2.1.3 Tomcat 2.2 基本使用2.2.1 下载2.2.2 安装与卸载2.2.3 启动…

nestJs(二)node项目发送请求

整体演示 Get 请求参数 Get 请求的参数一般会放在 URL 上&#xff0c;这只需要Query 装饰器就行了。 Post 参数 Post 参数有些不同&#xff0c;会用到 DTO 的传输。因为数据通过 HTTP 传输是文本类型&#xff0c;因此需要将文本类型转化成代码可识别的变量。 新建 students…

ssm823基于ssm的心理预约咨询管理系统的设计与实现+vue

ssm823基于ssm的心理预约咨询管理系统的设计与实现vue 交流学习&#xff1a; 更多项目&#xff1a; 全网最全的Java成品项目列表 https://docs.qq.com/doc/DUXdsVlhIdVlsemdX 演示 项目功能演示&#xff1a; ————————————————

2013年11月26日 Go生态洞察:Go中的文本规范化

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

如何在jupyter 上安装Office365-REST-Python-Client

最近工作需要写python代码从sharepoint 上定期load 数据写入到SQL server 中&#xff0c; 首先需要安装 office365 的python库&#xff08;python库名&#xff1a; Office365-REST-Python-Client&#xff09;但是直接安装失败了。 !pip install Office365-REST-Python-Client…

HTML5学习系列之标题和正文、描述性信息

HTML5学习系列之标题和正文、描述性信息 标题和正文标题段落 描述性信息强调注解备选上下标术语代码预定义格式缩写词编辑提示引用引述换行显示修饰非文本注解 总结 标题和正文 标题 按语义轻重排列&#xff1a;h1\h2\h3\h4\h5\h6 <h1>诗词介绍</h1> <h2>…