📅  最后修改于: 2023-12-03 15:36:18.254000             🧑  作者: Mango
在数组中删除重复项是一个经典的算法问题。在这个问题中,我们需要删除数组中的重复项,以便每个元素只出现一次,并返回新数组的长度。
一种简单的解法是使用两个指针。第一个指针用于遍历数组,第二个指针用于记录不重复的元素。如果下一个元素与当前不重复的元素不同,则将它复制到第二个指针指向的位置。最后返回第二个指针的位置。
public int removeDuplicates(int[] nums) {
if (nums == null || nums.length == 0) {
return 0;
}
int i = 0;
for (int j = 1; j < nums.length; j++) {
if (nums[j] != nums[i]) {
i++;
nums[i] = nums[j];
}
}
return i + 1;
}
时间复杂度为 O(n),其中 n 是数组的长度。因为我们只遍历了一次数组,所以解法是线性时间复杂度的。
空间复杂度为 O(1),因为我们只使用了常量级别的额外空间。
这是一个简单但是有趣的算法问题,考察了算法设计和数组操作的能力。如果我们掌握了指针和数组操作的基本技巧,这个问题不难解决。