目录

每日一题:序列中删除指定数字                                                        ————来自牛客网BC124

一、首先咱们看看题目及示例

二、方法思路

(1)暴力覆盖法

(2)“另寻出路“”法

(3)不删而减法

三、总结


每日一题:序列中删除指定数字
                                                        ————来自牛客网BC124

大家好,我是小白,每日登山,顶峰相见
    今天我来给大家讲解一道牛客网上的题,做了这么多题,感觉得和大家分享分享我的解题思路,若有错误,望大家斧正。


一、首先咱们看看题目及示例

这道题大致的意思就是让我们删除数组中一个指定的数字,并且不改变相对的顺序。

二、方法思路

(1)暴力覆盖法

顾名思义,暴力覆盖法就是用最朴实的方法,也是大家最常想到的方法,用被删除数字的后面那个数字来覆盖他。我们的思路就是首先找到那个数字,也就是需要一个循坏来遍历这个数组,然后让后面的那个数字来覆盖删除数字以达到删除效果,并且不改变数字的顺序。下面看代码

int main() {int length = 0, arr[50] = { 0 }, target = 0,many=0;//先将要使用的数组和数组有用的长度以及要删除的目标数列出scanf("%d", &length);    //确定长度                 //many为删除元素的个数for (int i = 0; i < length; i++) {scanf("%d", &arr[i]);  //通过循环的方式将数据输入进数组}scanf("%d", &target);   //确定删除的数据many=deletemany(length, &arr, target);int *arr2 = delete(length, &arr, target);//删除后序列,用arr2来接收,此时arr2未定义长度,用名字来代表第一个位置的地址for (int i = 0; i < length - many; i++) // 然后接收printf("%d ", arr2[i]);return 0;
}

首先按照题目要求,输入数组的长度length,一个数组,以及我们想要删除的目标数字target。在数组中存入数据我们,使用最基本的for循环来进行输入,此时之前的length长度就可以用来控制循环的结束。然后我一般的解题习惯是写一个函数(我认为这是一个好习惯,可以重复用,并且使主函数简洁),这里我们先假设写好了一个能够满足这个程序的函数delete,然后数组删除完毕,接下里进行打印函数,因为函数经过删减,我们不知道数组中存在的数的个数,也就不知道打印结束的条件,此时我们另令一个函数deletemany,记录要删减的数字的个数。

两个函数如下

int* delete(int length, int* arr, int target) {for (int i = 0; i < length; i++) {   //开始遍历while (arr[i] == target&&i!=length-1) {   //当第i+1个元素为要删减的数目时,用while的目的是,让连续的重复数都可以删除for (int j = i; j < length-1; j++) {//而当用if时,再次进入循环的时候,此时arr[i]是删除数的下一位的数据arr[j] = arr[j + 1];             //再次进入循环后,判断的就是原先i的后两位了,中间连续的就无法判断}length--;}}return arr;//返回素组最好用地址,我此时取他地址返回,就能接收了
}
int deletemany(int length, int* arr, int target) {int j = 0;for (int i = 0; i < length; i++) {if (arr[i] == target)  j++;       //每找到相同的数字,就用j来记录一次}return j;
}

deletemany函数容易理解。

我们来对delete函数,进行分析,首先要将数组的值传出去,我能想到的办法就是将地址传出去,然后用另一个数组来接收,也就是上面的arr2,所以函数的返回值类型是地址,然后数组中是数字,所以是整型。接下来这个方法的难点来了,每次删除数据时用后面一个数据来替代,那么当删除的数据是最后一个的时候呢?此时后面没有数据了,强行覆盖就会超过数据的长度,编码错误。我想的办法就是不管他,让他留在那里,当我检测他是最后一个的时候,我直接不进入循环,但是我deletemany函数已然会记录那个数字,最后打印的时候就不会打印出来。length--也很重要,这个可以记录删减后最后一个元素所在的位置。

(2)“另寻出路“”法

删减一个函数容易出错,那我们就重新找一个数组吧,不删减,在新的数组数组上记录下需要的数组就好了。我的思路是,创建一个新的空数组,要删减的数字就不加入,其余的的数字就加入。下面

int* delete(int length, int* arr, int target) {int new[50];return &new;
}

看代码

int* delete(int length, int* arr, int target) {int new[50],j=0;for (int i = 0; i < length; i++) {             //遍历数组依然是必须的if(arr[i]!=target) {new[j] = arr[i];  j++; }}              return &new;
}

这个函数相对而言就简单很多啦

(3)不删而减法

第三种方法是我们不删除,但是我们将要删的数字记录下来,然后打印的时候不打印这个数字,这个方法更简单,但是却不是一个最佳方法,属于偷懒的方法,下面看代码

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main() {int arr[50] = { 0 };int length;scanf("%d", &length);//行数for (int i = 0; i < length; i++) {scanf("%d", &arr[i]);//输入序列}int target; //要删的数字scanf("%d", &target);for (int i = 0; i < length; i++) {if (arr[i] != target)printf("%d ", arr[i]); //打印非0的数字}return 0;
}

三、总结

1、一个题的思维不应该拘泥于一种类型,我们应该打开思维,或许一种比一种简单

2、但是在寻找简单的方法途中,不能偷懒,去找程序要求的bug,而忽略了其本身给我们带来的思维锻炼

3、多亲自动手尝试,会发现很多你不曾注意的细节

4、不会写的时候一定要先思考,然后看看别人的代码,会给你带来很多的思考,集思广益,站在巨人的肩膀上才能成功

最后,蟹蟹大家的观看呀,走过路过,点个赞再走啦,小白的登山之路需要大家的鼓励才能攀高峰!

多种思路删除数组中的指定元素相关推荐

  1. php js动态删除数组元素,javascript如何删除数组中的指定元素

    js删除数组中的指定元素主要分为两步,首先判断数组中是否包含这个元素,然后再通过splice()方法来删除指定元素 本篇文章主要介绍的是如何通过javascript语言对数组中的指定元素进行删除的方法 ...

  2. js remove 当前元素_详解js删除数组中的指定元素

    本篇文章将会给大家介绍两种删除数组中的指定元素的方式,分别为: 1.单独定义一个的函数,通过函数来删除指定数组元素. 2.为Array对象定义了一个removeByValue的方法,在调用方法来删除指 ...

  3. java数组删除元素_java中删除 数组中的指定元素方法

    java中删除 数组中的指定元素要如何来实现呢,如果各位对于这个算法不是很清楚可以和小编一起来看一篇关于java中删除 数组中的指定元素的例子. java的api中,并没有提供删除数组中元素的方法.虽 ...

  4. java删除数组中指定元素_java学习中如何删除数组中的指定元素

    java的api中,并没有提供删除数组中元素的方法.虽然数组是一个对象,不过并没有提供add()remove()或查找元素的方法.这就是为什么类似ArrayList和HashSet受欢迎的原因. 不过 ...

  5. 删除数组中某个指定元素或删除数组中某个对象元素

    ES6--删除数组中某个指定元素或删除数组中某个对象 1.删除数组中某个指定元素 2.删除数组中的某个对象 1.删除数组中某个指定元素 let index = this.array.indexOf(n ...

  6. 删除数组中的指定元素或数组对象

    1.删除数组中的某个指定元素 1)首先获取元素下标,用indexOf()函数找到他的位置index,如果没有找到这个元素那么index将会等于-1:如下为找到元素2的下标 var array = [1 ...

  7. C语言 - 删除数组中的指定元素(Delete)

    目录 引言: 题目说明: 举例分析: 初始状态: step 1: Step 2: Step 3 : Step 4 :  将最后一个元素赋值为0 Step 5 :将i下标向前迁移一位(重复判断): 代码 ...

  8. 删除数组中的指定元素

    比如现在有个纯数字的数组,要删除数组中为2的那一项元素 const arr = [2, 4, 5, 3, 6, 1, 8]let index = arr.findIndex(item => it ...

  9. 删除数组中的指定元素 | JavaScript

    JavaScript的数组中默认不支持删除指定元素的操作,如 let book_id = [1,2,3,4] book_id.delete(4) //错误,JS数组没有该方法 因此,解决的办法有 使用 ...

最新文章

  1. python表格控件_python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例...
  2. 基于Python的BPSK音频的波形和频谱
  3. oracle技术之查询初始化参数的方法(六)
  4. 对象必须实现 iconvertible。_精雕基础教程:对象的显示颜色
  5. react.js 给标识ref,获取内容
  6. 水表多标签训练问题总结
  7. ArcGIS Maritime Server 开发教程(四)Maritime Service 开发实践
  8. stream流常用方法_Java8-Stream关键知识点
  9. C# 读写json文件
  10. CAJ VIEWER 7.2 已停止工作(正确的处理方法,最快最正确的方法,网上的其他方法也就是看看,很难找到问题的正确办法)
  11. nssa和stub_华为stub、nssa区域配置
  12. elementui分页插件使用总结
  13. 爬虫headers参数
  14. linux firefox源码修改主页
  15. IllegalArgumentException异常
  16. [转载]常用自动挂机APP下载
  17. oracle 拼音首字母查询,ORACLE 中文列 按拼音首字母查询 升级版
  18. 如何用计算机名安装打印机,如何添加打印机(如何在电脑上安装打印机?)
  19. MySQL Workbench生成数据表关系图
  20. SpringBoot+Vue搭建前后端分离的轻博客

热门文章

  1. HTML5期末大作业:漫画在线网站设计——奇恩动漫(1页) HTML+CSS+JavaScript 本网页作业为一个展示产品类型的漫画设计作业作品成品
  2. 【论文分享】Validating Static Warnings via Testing Code Fragments
  3. 使用React,Redux,redux-sage构建图片库(翻译)
  4. 两棵二叉搜索树中的所有元素(2022-5-1)每日一练
  5. Tour de France - 法国大西南
  6. 大脑如同编程,bug如何修复?
  7. 创投日报:3月13日收录投融资项目33起
  8. 主流数据库之索引及其例子
  9. postcss-pxtorem中使用selectorBlackList过滤,使某些样式不进行rem转换
  10. 手把手教你制作ESP8266物联网创意点阵时钟,女朋友看了都想要!