前言
demo1最简单,是正常的小白思路,yyds.
demo2在demo1的基础上稍微变了一下。
demo1与demo2针对各种数组【有序or无序】
demo3只针对有序数组,但是从时间复杂度和空间复杂度来说效率都是最高的,yyds,若数组无序可先排序。
1.demo1
* 难度:简单 * 实现思路:采用双层循环进行遍历,当外层循环[i]与内层循环[j]数据相等时, * 开始从内层循环当前下标处[j],将之后的数据依次向前覆盖,同时长度[length]减一,达到删除最后一个元素的效果
代码如下(示例):
public int[] demo1(int[] array){
int length = array.length;
//此处为length-1,因为最后一个元素再没有可比项,且可避免内层循环j的下标越界问题
for (int i = 0;i < length-1; i++){
for (int j = i+1;j < length; j++){
if (array[i] == array[j]){
//数组前移
for (int k = j;k < length; k++){
array[k-1] = array[k];
//
}
//排除前移后的元素与当前元素相等而忽略的问题
j--;
length--;
}
}
}
int[] arr = Arrays.copyOf(array,length);
return arr;
}2.demo2
* 难度:简单 * 实现思路:采用双层循环进行遍历,当外层循环[i]与内层循环[j]数据相等时, * 将数组最后一个元素赋值给下标为[j]元素,达到替换的效果,同时长度[length]减一,达到删除最后一个元素的效果
代码如下(示例):
public int[] demo2(int[] array){
int length = array.length;
for (int i = 0;i < length-1; i++){
for (int j = i+1;j < length; j++){
if (array[i] == array[j]){
array[j] = array[length-1];
j--;
length--;
}
}
}
int[] arr = Arrays.copyOf(array,length);
return arr;
}2.demo3
* 难度:中等 * 实现思路:采用while循环,如果下标front与rear出元素不相等,则front++,再进行替换, * 反之,rear继续后移
代码如下(示例):
public int[] demo3(int[] array){
int length = array.length;
int count = 0;
int front = 0,rear = 1;
while(rear < length){
if (array[front] != array[rear]){
front++;
array[front] = array[rear];
count++;
}
rear++;
}
int[] arr = Arrays.copyOf(array,length-count);
return arr;
}
版权声明:本文为qq_45838712原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。