用java写一个函数删除数组中的重复元素,输入为int[],时间复杂度和空间复杂度都控制在最小
时间: 2024-04-13 12:30:02 浏览: 137
Java数组练习题目.docx
你好!下面是一个示例的Java函数,它可以删除输入数组中的重复元素,并且时间复杂度和空间复杂度都被控制在最小。
```java
import java.util.Arrays;
public class RemoveDuplicates {
public static int[] removeDuplicates(int[] nums) {
// 检查特殊情况
if (nums == null || nums.length == 0) {
return new int[0];
}
// 对数组进行排序
Arrays.sort(nums);
// 记录新数组的长度
int length = 0;
// 逐个比较元素,跳过重复元素
for (int i = 1; i < nums.length; i++) {
if (nums[i] != nums[length]) {
nums[++length] = nums[i];
}
}
// 返回非重复元素的数组
return Arrays.copyOfRange(nums, 0, length + 1);
}
public static void main(String[] args) {
int[] nums = {1, 2, 3, 3, 4, 4, 5};
int[] result = removeDuplicates(nums);
System.out.println(Arrays.toString(result));
}
}
```
这个函数的思路是先对数组进行排序,然后使用双指针法来遍历数组。其中,一个指针用于记录非重复元素的位置,另一个指针用于遍历整个数组。如果遇到不同的元素,就将其放入新数组中,并更新非重复元素的位置。最后,使用`Arrays.copyOfRange()`方法来截取新数组的部分,并返回结果。
这个函数的时间复杂度为 O(nlogn),主要是由于排序操作所导致的。空间复杂度为 O(1),因为只使用了常数级别的额外空间。
阅读全文