下面使用的方法比较简单,采用的是双指针。
/**
* 数组去重
*/
@Test
public void test1() {
int[] nums = {1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9};
// 去重数量
int deNumLen = 0;
// 双指针
// 1. 计算去重之后的数组大小
int i = 0;
for (; i < nums.length;) {
// 首判断
if (i == 0) {
deNumLen++;
}
for (int j = i; j < nums.length; j++) {
if (nums[i] != nums[j]) {
deNumLen++;
i = j;
break;
}
}
// 尾判断
if (i == (nums.length - 1)) {
break;
}
}
System.out.println(deNumLen);
// 2. 根据计算出的大小创建新数组
int[] deNums = new int[deNumLen];
// 3. 填充数组
int index = 0;
while (index < deNums.length) {
int newI = 0;
for (; newI < nums.length;) {
// 首判断
if (newI == 0) {
deNums[index] = nums[0];
index++;
}
for (int newJ = newI; newJ < nums.length; newJ++) {
if (nums[newI] != nums[newJ]) {
newI = newJ;
deNums[index] = nums[newI];
index++;
break;
}
}
// 尾判断
if (newI == (nums.length - 1)) {
deNums[index - 1] = nums[nums.length - 1];
break;
}
}
}
System.out.println(Arrays.toString(deNums));
}
原文:https://www.cnblogs.com/twentyone/p/15228723.html