1.1.28 删除重复元素。修改 BinarySearch 类中的测试用例来删去排序之后白名单中的所有重复元素。
public static void main(String[] args) {
Integer[] whiteList = new Integer[]{1,1,2,2,3,4,5,5,5};
whiteList = delDuplicateElement(whiteList);
System.out.println(Arrays.toString(whiteList));
}
public static Integer[] delDuplicateElement(Integer[] arr) {
Arrays.sort(arr);
int len = arr.length;
for (int i = 0; i < len; i++) {
int x = arr[i];
Integer ans = binarySearch(arr, i+1,len-1, x);
while(ans>-1) {
len = delElement(arr, len, ans);
ans = binarySearch(arr, i+1,len-1, x);
}
}
Integer[] newArr = new Integer[len];
for (int i = 0; i < len; i++) {
newArr[i] = arr[i];
}
return newArr;
}
public static int delElement(Integer[] arr, int len, int index) {
for (int i = index; i < len-1; i++) {
arr[i] = arr[i+1];
}
len--;
return len;
}
public static Integer binarySearch(Integer[] arr, int l,int r, Integer x) {
if(l>r) return -1;
Integer ans = -1;
while(l<=r) {
int mid = (l+r)/2;
if(x>arr[mid]) {
l = mid+1;
} else if(x<arr[mid]) {
r = mid-1;
} else {
ans = mid;
return ans;
}
}
return ans;
}