用java双指针方法写去除数组中的重复元素
时间: 2024-01-30 09:03:04 浏览: 85
可以使用双指针方法来去除一个有序数组中的重复元素。具体实现如下:
```java
public static int[] removeDuplicates(int[] nums) {
if (nums == null || nums.length == 0) {
return nums;
}
int slow = 0;
for (int fast = 1; fast < nums.length; fast++) {
if (nums[fast] != nums[slow]) {
slow++;
nums[slow] = nums[fast];
}
}
return Arrays.copyOf(nums, slow + 1);
}
```
解释一下,我们定义两个指针,一个指向当前不重复元素的最后一个位置,另一个用来遍历数组。如果遍历到的元素和当前不重复元素的最后一个位置的元素相等,则继续遍历;否则,将当前指针指向的元素替换为遍历到的元素,并将不重复元素的最后一个位置指针后移一位。最后,返回一个新的数组,长度为不重复元素的个数。
相关问题
java去除数组中重复数据
在Java中,有多种方法可以去除数组中的重复数据。以下是几种常见的方法:
1. **HashSet**:
使用`HashSet`是因为它不允许有重复元素,你可以将数组转换为`HashSet`,然后再将其转换回数组。这会自动去重。
```java
import java.util.Arrays;
import java.util.HashSet;
public int[] removeDuplicates(int[] arr) {
HashSet<Integer> set = new HashSet<>();
for (int num : arr) {
set.add(num);
}
return set.toArray(new int[set.size()]);
}
```
2. **Arrays.copyOf() + Stream API**:
如果你对现代Java版本熟悉,可以利用Stream API来简化操作:
```java
import java.util.Arrays;
import java.util.stream.IntStream;
public int[] removeDuplicates(int[] arr) {
return IntStream.of(arr).distinct().toArray();
}
```
3. **暴力法(双指针)**:
对于小型数组,可以用两个指针从头到尾遍历并比较,将第一个未见过的值复制到新数组中。
```java
public int[] removeDuplicates(int[] arr) {
if (arr == null || arr.length <= 1) {
return arr;
}
int[] result = new int[arr.length];
int j = 0;
for (int i = 0; i < arr.length - 1; i++) {
if (arr[i] != arr[i + 1]) {
result[j++] = arr[i];
}
}
result[j] = arr[arr.length - 1]; // 将最后一个元素添加到结果数组
return Arrays.copyOf(result, j + 1); // 返回去重后的数组
}
```
java要求将数组中的元素为0的去掉,将不为0的值存入到新数组
中,该如何实现?
您可以使用两个指针,一个指向原数组的头部,另一个指向新数组的头部。遍历原数组,将不为0的元素复制到新数组中,并将新数组指针后移。遍历结束后,新数组中的元素就是原数组中不为0的元素。以下是Java代码示例:
int[] nums = {0, 1, 0, 3, 12};
int[] newNums = new int[nums.length];
int j = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
newNums[j] = nums[i];
j++;
}
}
阅读全文