学习指引
- 序、专栏前言
- 一、【例题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
开始的位置。
课后习题
序号 | 题目链接 | 难度评级 |
1 | 删除一个元素使数组严格递增 | 2 |
2 | 删除有序数组中的重复项 | 2 |