序列中删除指定数字【四种解法】

在这里插入图片描述


文章目录

  • 解法1:另辟空间法
  • 解法2:覆盖法
  • 解法3:覆盖法(进阶版)
  • 解法4:异或取巧法


  题目:有一个整数序列(可能存在重复的整数),编写程序删除序列中指定的某一个整数,输出删除指定数字之后的序列,序列中未被删除数字的前后位置不发生改变。

输入描述

 第1行:输入一个整数(0≤N≤50)。
 第2行:输入N个整数,输入用空格分隔的N个整数。
 第3行:输入想要进行删除的一个整数。

输出描述

 输出删除指定数字之后的序列。


解法1:另辟空间法

  另外创建一个数组(用来存放删除指定数字之后的序列),来实现输出删除指定数字之后的序列。代码如下:

#include<stdio.h>
void delete_num(int src[], int num, int del)
{int dest[50] = { 0 };int i = 0;int j = 0;int sz = num;//删除元素while (i < num){if (src[i] == del){i++;sz--;}elsedest[j++] = src[i++];}//打印数组for (i = 0; i < sz; i++)printf("%d ", dest[i]);
}
int main()
{//输入数组元素个数int num = 0;scanf("%d", &num);//输入数组int arr[50] = { 0 };int i = 0;for (i = 0; i < num; i++){scanf("%d", &arr[i]);}//输入需要删除的数int del = 0;scanf("%d", &del);//开始删除,并输出最终数组delete_num(arr, num, del);return 0;
}

在这里插入图片描述

  上面的代码可以达成目的,但这样做的缺点是会另外多开辟一块空间。


解法2:覆盖法

  在遍历整个序列时若发现需要删除的元素,则将后面所有的元素向前覆盖一位,这样可以达到最终目的。值得注意,在遍历的时候可能存在重复连续的整数,所以每次找到需要删除的元素后,最好是在删除位置重新往后遍历。如下图所示:

在这里插入图片描述

#include<stdio.h>
void delete_num(int arr[], int num, int del)
{//删除数字int cur = 0;while (cur < num){if (arr[cur] != del)cur++;else{int i = 0;for (i = cur; i < num - 1; i++)arr[i] = arr[i + 1];num--;}}//打印数组int i = 0;for (i = 0; i < num; i++)printf("%d ", arr[i]);
}int main()
{//输入数组元素个数int num = 0;scanf("%d", &num);//输入数组int arr[50] = { 0 };int i = 0;for (i = 0; i < num; i++){scanf("%d", &arr[i]);}//输入需要删除的数int del = 0;scanf("%d", &del);//开始删除,并输出最终数组delete_num(arr, num, del);return 0;
}

在这里插入图片描述

  上面的代码大大增加了算法的复杂度,原因是使用了两个for循环嵌套。


解法3:覆盖法(进阶版)

  解法2中的覆盖法过于繁琐,需要多次重复遍历数组。那么存不存在一种只需要遍历一遍数组解法?答:覆盖法(进阶版)。解题思路:通过两个遍历速度不同的下标交错覆盖,实现删除数字的目的。如下图所示:

在这里插入图片描述

#include<stdio.h>
void delete_num(int arr[], int num, int del)
{int before = 0;int after = 0;int sz = num;//删除数字while (before < num){if (arr[before] != del)arr[after++] = arr[before++];else{before++;sz--;}}//打印数组int i = 0;for (i = 0; i < sz; i++)printf("%d ", arr[i]);
}int main()
{//输入数组元素个数int num = 0;scanf("%d", &num);//输入数组int arr[50] = { 0 };int i = 0;for (i = 0; i < num; i++){scanf("%d", &arr[i]);}//输入需要删除的数int del = 0;scanf("%d", &del);//开始删除,并输出最终数组delete_num(arr, num, del);return 0;
}

在这里插入图片描述


解法4:异或取巧法

  异或取巧法解题思路:使用'^'(异或操作符)对序列中所有元素异或上需要被删除的那个数,这样序列中所有需要被删除的数就会变为0。再将那些没有变为0的数异或上需要被删除的那个数,这些数就变回原先的数值。异或的两个特性:

  1. 相同数值进行异或,结果必为0
  2. 任意数值与0进行异或,结果必为该数本身
#include<stdio.h>
void delete_num(int arr[], int num, int del)
{int i = 0;for (i = 0; i < num; i++){arr[i] ^= del;}for (i = 0; i < num; i++){if (arr[i] != 0)printf("%d ", arr[i] ^ del);}
}int main()
{//输入数组元素个数int num = 0;scanf("%d", &num);//输入数组int arr[50] = { 0 };int i = 0;for (i = 0; i < num; i++){scanf("%d", &arr[i]);}//输入需要删除的数int del = 0;scanf("%d", &del);//开始删除,并输出最终数组delete_num(arr, num, del);return 0;
}

在这里插入图片描述


在这里插入图片描述

这份博客👍如果对你有帮助,给博主一个免费的点赞以示鼓励欢迎各位🔎点赞👍评论收藏⭐️,谢谢!!!
如果有什么疑问或不同的见解,欢迎评论区留言欧👀。

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

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

相关文章

【07】Maven项目多环境打包配置

&#xff08;1&#xff09;Web项目使用Maven进行多模块划分开发之后&#xff0c;面临一个问题&#xff0c;即如何加载不同环境的配置文件打包发布到不同的环境中&#xff1f; &#xff08;2&#xff09;不同的环境有开发环境、测试环境、线上生产环境等。 &#xff08;3&#x…

机器学习—前向传播的一般实现

可以写一个函数来实现一个密集的层&#xff0c;那是神经网络的单层&#xff0c;所以定义稠密函数&#xff0c;它将上一层的激活作为输入以及给定层神经元的参数w和b。看下边图片所展示的例子&#xff0c;把所有这些权重向量堆叠成一个矩阵&#xff0c;wnp.array([[1,-3,5][2,4,…

濮良贵《机械设计》第十版课后习题答案全解PDF电子版

《机械设计》(第十版)是“十二五”普通高等教育本科国家级规划教材&#xff0c; 是在《机械设计》(第九版)的基础上修订而成的。本次修订主要做了以下几项工作&#xff1a; 1. 内容的适当更新——自本书第九版出版以来&#xff0c; 机械工程及相关领域的新理论、新技术和新标准…

1分钟解决Excel打开CSV文件出现乱码问题

一、编码问题 1、不同编码格式 CSV 文件有多种编码格式&#xff0c;如 UTF - 8、UTF - 16、ANSI 等。如果 CSV 文件是 UTF - 8 编码&#xff0c;而 Excel 默认使用的是 ANSI 编码打开&#xff0c;就可能出现乱码。例如&#xff0c;许多从网络应用程序或非 Windows 系统生成的 …

曹操出行借助 ApsaraMQ for Kafka Serverless 提升效率,成本节省超 20%

本文整理于 2024 年云栖大会主题演讲《云消息队列 ApsaraMQ Serverless 演进》&#xff0c;杭州优行科技有限公司消息中间件负责人王智洋分享 ApsaraMQ for Kafka Serverless 助力曹操出行实现成本优化和效率提升的实践经验。 曹操出行&#xff1a;科技驱动共享出行未来 曹操…

【研究生必备】如何利用AI论文生成器免费提升效率?

在研究生阶段&#xff0c;写论文往往是学业中最具挑战性的部分之一。 面对繁重的文献阅读、复杂的分析和紧迫的时间限制&#xff0c;很多同学都感到压力倍增。不过&#xff0c;随着科技的发展&#xff0c;AI论文生成器的出现为我们提供了一种全新的解决方案。今天&#xff0c;…

Android无限层扩展多级recyclerview列表+实时搜索弹窗

业务逻辑&#xff1a; 点击选择&#xff0c;弹出弹窗&#xff0c;列表数据由后台提供&#xff0c;不限层级&#xff0c;可叠加无限层子级&#xff1b; 点击item展开收起&#xff0c;点击尾部icon单选选中&#xff0c;点击[确定]为最终选中&#xff0c;收起弹窗&#xff1b; 搜索…

写作 | 人工智能在师生教学场景中的应用前景

正文 本文讨论人工智能在师生教学场景中的应用前景。在开展论述前&#xff0c;首先需要明确一些概念。 第一&#xff0c;什么是人工智能&#xff1f;人工智能&#xff08;Artificial Intelligence&#xff09;&#xff0c; 字面意义&#xff0c;即人工制作的智慧能力。这种智慧…

Java线程6种生命周期及转换

多线程技术是我们后端工程师在面试的时候必问的一个知识点&#xff0c;今天就来盘点一下多线程的相关知识&#xff0c; 先来说下进程&#xff0c;线程及线程的生命周期&#xff1a; 进程&#xff1a;进程就是正在进行中的程序&#xff0c;是没有生命的实体&#xff0c;只有在运…

美格智能5G车规级通信模组: 5G+C-V2X连接汽车通信未来十年

自2019年5G牌照发放开始&#xff0c;经过五年发展&#xff0c;我国5G在基础设施建设、用户规模、创新应用等方面均取得了显著成绩&#xff0c;5G网络建设也即将从基础的大范围覆盖向各产业融合的全场景应用转变。工业和信息化部数据显示&#xff0c;5G行业应用已融入76个国民经…

GooglePlay: 应用和游戏的内容分级

对于后台私信的开发者们,希望能够携带详细过审记录和拒审邮件一同发来,方便我们尽快解决问题 应用与游戏 为您的应用或游戏选择类别和标签选择要添加的标签选择类别并添加标签类别示例与应用、游戏以及两者中所投放广告的内容分级相关的要求应用如何获得内容分级内容分级的用…

多线程--模拟实现定时器--Java

一、定时器的概念 定时器的本质就是一个闹钟&#xff0c;时间到了开始执行某些逻辑。Java标准库中的定时器是Timer。 我们查阅Java文档可以详细看到定时器的使用方法&#xff1a; Timer最核心的方法就是schedule方法。值得注意的是我们通常描述任务是使用Runnable来描述&…

Docker 镜像体积优化实践:从基础镜像重建到层压缩的全流程指南

​ 由于最近在发布的时候发现docker镜像体积变得越来越大&#xff0c;导致整个打包发布流程变得非常耗时了。所以又接到一个差事&#xff0c;优化最终镜像体积。顺便也记录一下docker镜像体积优化的一些步骤。 大概步骤可以分为以下几个步骤&#xff1a; 重做基础镜像&#x…

[linux 驱动]PWM子系统详解

目录 1 描述 2 结构体 2.1 pwm_chip 2.2 pwm_ops 2.3 pwm_device 2.4 pwm_class 3 相关函数 3.1 注册与注销 PWM 控制器 3.1.1 pwmchip_add 3.1.2 pwmchip_remove 3.2 申请与释放 PWM 设备 3.2.1 pwm_request 3.2.2 devm_pwm_get 3.2.3 pwm_free 3.3 控制 PWM …

Linux入门(2)

林纳斯托瓦兹 Linux之父 1. echo echo是向指定文件打印内容 ehco要打印的内容&#xff0c;不加任何操作就默认打印到显示器文件上。 知识点 在Linux下&#xff0c;一切皆文件。 打印到显示器&#xff0c;显示器也是文件。 2.重定向 >重定向操作&#xff0c;>指向的…

如何判断本地DNS是否污染

本地DNS污染是一种比较复杂且会对网络访问产生负面影响的现象。DNS即域名系统&#xff0c;它的主要功能是将便于人们记忆的域名转换为计算机能够理解的IP地址。本地DNS污染是指在本地网络环境中&#xff0c;DNS解析过程受到恶意干扰或错误配置的影响&#xff0c;使得域名被解析…

【数据仓库】Hive 拉链表实践

背景 拉链表是一种数据模型&#xff0c;主要是针对数据仓库设计中表存储数据的方式而定义的&#xff1b;顾名思义&#xff0c;所谓拉链表&#xff0c;就是记录历史。记录一个事务从开始一直到当前状态的所有变化的信息。 拉链表可以避免按每一天存储所有记录造成的海量存储问题…

日常工作采坑,关于图片压缩哪些坑一次性踩完。

文章目录 0.前言1.代码实现2.压缩工具包的配置 0.前言 首先说明一下这个图片压缩为什么那么艰难&#xff0c;主要原因还是在于需求过于奇葩。比较奇葩的原因有如下几点&#xff1a;   1.图片是一个很大的文件&#xff0c;我长这么大还没见过这个大的文件。图下可以图片文件可…

语音识别ic赋能烤箱,离线对话操控,引领智能厨房新体验

一、智能烤箱产品的行业背景 随着科技的飞速发展&#xff0c;智能家居已经成为现代家庭的新宠。智能烤箱作为智能家居的重要组成部分&#xff0c;正逐渐从高端市场走向普通家庭。消费者对于烤箱的需求不再仅仅局限于基本的烘焙功能&#xff0c;而是更加注重其智能化、便捷化和…

一文详解开源ETL工具Kettle!

一、Kettle 是什么 Kettle 是一款开源的 ETL&#xff08;Extract - Transform - Load&#xff09;工具&#xff0c;用于数据抽取、转换和加载。它提供了一个可视化的设计环境&#xff0c;允许用户通过简单的拖拽和配置操作来构建复杂的数据处理工作流&#xff0c;能够处理各种数…