写一段java代码,用于将数组中每个重复出现的数,只保留该数第一次出现的位置,删除其余位置。
时间: 2024-05-06 16:22:03 浏览: 62
```
public static int[] removeDuplicate(int[] arr) {
HashSet<Integer> set = new HashSet<>();
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
if (!set.contains(arr[i])) {
set.add(arr[i]);
list.add(arr[i]);
}
}
int[] result = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
result[i] = list.get(i);
}
return result;
}
```
该代码实现了使用 HashSet 和 ArrayList 的方式来去重,保留每个数第一次出现的位置。具体实现步骤为:
1. 创建一个 HashSet 用于存放已经出现过的数。
2. 遍历数组,如果当前数在 HashSet 中不存在,说明该数第一次出现,将其添加到 HashSet 和 ArrayList 中。
3. 将 ArrayList 中的元素转化为数组并返回。
相关问题
写一段Java代码:给定含有n个整数的数组,要求对这个数组进行去重操作,这个数组中每个重复出现的数,只保留该数第一次出现的位置,删除其余位置。
```java
public static int[] removeDuplicates(int[] nums) {
if (nums == null || nums.length == 0) {
return new int[]{};
}
Set<Integer> set = new HashSet<>();
List<Integer> list = new ArrayList<>();
for (int i = 0; i < nums.length; i++) {
if (!set.contains(nums[i])) {
set.add(nums[i]);
list.add(nums[i]);
}
}
int[] result = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
result[i] = list.get(i);
}
return result;
}
```
java给定一个整数组 nums 和一个整数目标值 target ,请你在该数组中找出 和为目标值 target 的那两 整数,并它们的数组下标. 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。
你可以使用一种双指针的方法来解决这个问题。首先,创建一个哈希表(HashMap)用来存储数组元素及其对应的索引值。
然后,使用两个指针i和j分别指向数组的第一个元素和最后一个元素。在每一次循环中,通过判断当前指向的两个元素之和与目标值的大小关系,来决定移动哪个指针。
如果当前指向的两个元素之和等于目标值,则返回它们的索引。
如果当前指向的两个元素之和小于目标值,则将指针i向右移动一位。
如果当前指向的两个元素之和大于目标值,则将指针j向左移动一位。
重复上述步骤,直到找到满足条件的两个元素或者遍历完整个数组。
以下是对应的Java代码实现:
```java
import java.util.HashMap;
public class Solution {
public int[] twoSum(int[] nums, int target) {
HashMap<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int complement = target - nums[i];
if (map.containsKey(complement)) {
return new int[] { map.get(complement), i };
}
map.put(nums[i], i);
}
throw new IllegalArgumentException("No two sum solution");
}
}
```
这段代码的时间复杂度为O(n),其中n是数组的长度。
阅读全文