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

在这里插入图片描述


文章目录

  • 解法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,一经查实,立即删除!

相关文章

【p2p、分布式,区块链笔记 Torrent】WebTorrent的add和seed函数

在【p2p、分布式&#xff0c;区块链笔记 Torrent】WebTorrent的上传和下载界面的示例中&#xff0c;主要通过WebTorrent类的add和seed函数实现相关功能。这两个函数都返回一个Torrent类对象的实例。 seed函数 import createTorrent, { parseInput } from create-torrent // &…

【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;科技驱动共享出行未来 曹操…

解析 MySQL 数据库容量统计、存储限制与优化技巧

管理 MySQL 数据库时&#xff0c;了解数据库中的数据量和存储占用情况是非常重要的&#xff0c;尤其是在面对大规模数据时。无论是为了优化数据库性能&#xff0c;还是为了进行容量规划&#xff0c;准确地统计数据库的容量可以帮助我们做出更好的决策。mysql的客户端工具是Navi…

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

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

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

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

位运算的使用与计算机组成的底层计算(java版)

目录 1. 求int类型数字的二进制2. 特殊值展示3. 心得 1. 求int类型数字的二进制 我们可以用位运算的与和左移去求 public class Lesson01 {public static void print(int num){for(int i 31; i >0; i--){System.out.print((num & (1 << i)) 0 ? "0&quo…

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

正文 本文讨论人工智能在师生教学场景中的应用前景。在开展论述前&#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: 应用和游戏的内容分级

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

人工智能学习--ANN模型、SVR模型

人工神经网络 (ANN) 概念 人工神经网络&#xff08;ANN&#xff09;是一种模拟人脑神经元连接结构的计算模型&#xff0c;通过多层神经元和加权连接来处理数据。典型的ANN由输入层、隐藏层和输出层组成。 工作原理 ANN通过传递输入数据至隐藏层神经元&#xff0c;将各层输出…

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

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

FrankenPHP实践

目录 1. 说明 2. 程序修改 3. 性能测试 4. 配置 4.1 Docker化部署 4.2 泛域名和证书设置 4.3 相关命令 5. 要点&#xff1a; 6. 参考 1. 说明 Frankenphp是一个先进的&#xff0c;结合了高性能Caddy服务器的PHP环境框架&#xff0c;它允许用户只需要少量改动&#xff…

2024第三次随堂测验参考答案

7-1 求一组数组中的平均数 输入10个整数&#xff0c;输出这10个整数的的平均数&#xff0c;要求输出的平均数保留2位小数 输入样例&#xff1a; 1 2 3 4 5 6 7 8 9 10 输出样例&#xff1a; 5.50 参考答案&#xff1a; #include <stdio.h> int main(){int sum 0;…

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 …