数组去重(不借助额外空间)
2021-05-28 05:00
标签:integer 输出 也有 面试 很多 class str == 个数 今天面试碰到了一个题目:给定排序数组,去除里面的重复元素,给出元素个数,并且数组的前几个元素都非空,空间为O(1)。 如 Integer[] arr = {0, 0, 1, 1, 1, 2, 3, 3, 4, 5, 5}; 操做后应返回6,并且数组为[0, 1, 2, 3, 4, 5, null, null, null, null, null] 面试的时候,记事本写了一个贼复杂的各种判断,还是没有完全实现,主要是不能使用额外空间限制了很多想法。刚才又回想了一下这个问题,想到一种稍简洁的办法,记录一下,可能也有更简洁的,想到了再记录,也欢迎大家留言。 输出: 1--[0, null, 1, null, null, 2, 3, null, 4, 5, null] 还有就是想了一下,如果只是用来交换非空和空值的顺序,使所有空元素都在后面,可以借鉴一下快排的想法,但是这样元素顺序就没有了,也不知道有用没。 数组去重(不借助额外空间) 标签:integer 输出 也有 面试 很多 class str == 个数 原文地址:https://www.cnblogs.com/moly/p/14806911.html @Test
public void test(){
Integer[] arr = {0, 0, 1, 1, 1, 2, 3, 3, 4, 5, 5};
//从后向前删除重复元素
for(int i = arr.length - 1; i > 0; i--){
if(arr[i] == arr[i-1]){
arr[i] = null;
}
}
System.out.println("1--"+ Arrays.toString(arr));
//遍历交换,使非空元素在前
int n = 0;
while(n ){
for(int i = n; i ){
if(arr[i] == null){
arr[i] = arr[i+1];
arr[i+1] = null;
}
}
n++;
}
System.out.println("2--"+ Arrays.toString(arr));
int count = 0;
n = 0;
while(n null){
count++;
}
System.out.println("3--"+ Arrays.toString(arr));
System.out.println("总数--"+ count);
}
2--[0, 1, 2, 3, 4, 5, null, null, null, null, null]
3--[0, 1, 2, 3, 4, 5, null, null, null, null, null]
总数--6 @Test
public void test2(){
Integer[] arr = {0, 0, 1, 1, 1, 2, 3, 3, 4, 5, 5};
//从后向前删除重复元素
for(int i = arr.length - 1; i > 0; i--){
if(arr[i] == arr[i-1]){
arr[i] = null;
}
}
System.out.println(Arrays.toString(arr));
//交换,使非空元素在前
int l = 0;
int r = arr.length - 1;
while(l r){
while(arr[l] != null){
l++;
}
while(arr[r] == null){
r--;
}
if(l r){
arr[l] = arr[r];
arr[r] = null;
}
}
System.out.println(Arrays.toString(arr));
}