0
点赞
收藏
分享

微信扫一扫

【第23天】给定一个长度为 n 的数组,返回删除第 X 位元素后的数组 | 数组删除操作

​​​​

学习指引

  • ​​序、专栏前言​​
  • ​​一、【例题1】​​
  • ​​1、题目描述​​
  • ​​2、解题思路​​
  • ​​3、模板代码​​
  • ​​4、代码解析​​
  • ​​三、推荐专栏​​
  • ​​四、课后习题​​

序、专栏前言

   本专栏开启,目的在于帮助大家更好的掌握学习​​Java​​​,特别是一些​​Java学习者​​​难以在网上找到系统地算法学习资料帮助自身入门算法
   但最最主要的还是需要独立思考,对于本专栏的所有内容,能够进行完全掌握,自己完完全全将代码写过一遍,对于算法入门肯定是没有问题的。
   算法的学习肯定不能缺少总结,这里我推荐大家可以到​高校算法社区​将学过的知识进行打卡,以此来进行巩固以及复习。
  学好算法的唯一途径那一定是题海战略,大量练习的堆积才能练就一身本领。专栏的任何题目我将会从【题目描述】【解题思路】【模板代码】【代码解析】等四板块进行讲解。

一、【例题1】

1、题目描述

,数组下标为,请你实现一个函数,返回删除第位数后的数组。如果数组没有第

2、解题思路

的元素,我们使用下标的值覆盖下标,再使用覆盖,后续同理。

3、模板代码

static int[] remove(int[] arr,int x,int n){
if (x>n) return arr;
for (int i = x; i <=n-1; i++) {
arr[i]=arr[i+1];
}
arr[n]=0;
return arr;
}

当然对于这个数组的的​​arraycopy​​​操作,我们也可以使用​​Java​​自带的函数进行操作

static int[] remove(int[] arr,int x,int n){
if (x>n) return arr;
if (n - x >= 0) System.arraycopy(arr, x + 1, arr, x, n - x);
arr[n]=0;
return arr;
}

如果仅仅是对数组打印,我们也可以进行虚空删除操作,这样输出的时候并未打印出第位元素,看上去就好像我们删除了一样。

static void remove(int[] arr,int x,int n){
for (int i = 1; i <=n; i++) {
if (i==x) continue;
System.out.println(arr[i]);
}
}

4、代码解析

  • 数组删除操作的场景比较少见,对于有该种需求,我们一般使用集合类或者链表等结构来存储元素。因为如果重复删除第一个元素,每次的时间复杂度都会达到级别。
  • ​​​System.arraycopy​​​函数的​​5​​​个参数标为​​123456​​​,它的作用是将参数​​3​​​数组从下标参数​​4​​​开始,长度为参数​​5​​​填充到数组为下标​​1​​​,下标从参数​​2​​开始的位置。
  • 【第23天】给定一个长度为 n 的数组,返回删除第 X 位元素后的数组 | 数组删除操作_学习_14

​​​​


课后习题

序号

题目链接

难度评级

1

​​ 删除一个元素使数组严格递增​​

2

2

​​ 删除有序数组中的重复项​​

2


举报

相关推荐

0 条评论