题目地址:
https://www.lintcode.com/problem/unique-array/description
给定一个数组 A A A,将数组去重后返回。要求数组中原数的相对位置不变(重复数字去掉其中一个即可)。
思路是哈希表。先用哈希表存 A A A中每个数出现的第一个位置,然后再遍历 A A A,并且只将出现在第一次出现位置的数加入答案。代码如下:
import java.util.HashMap;
import java.util.Map;
public class Solution {
/**
* @param arr: a integer array
* @return: return the unique array
*/
public int[] getUniqueArray(int[] arr) {
// write your code here
// 开一个哈希表存每个数第一次出现的位置
Map<Integer, Integer> map = new HashMap<>();
for (int i = arr.length - 1; i >= 0; i--) {
map.put(arr[i], i);
}
int[] res = new int[map.size()];
for (int idx = 0, i = 0; i < arr.length; i++) {
// 如果是第一次出现,则加入res
if (i == map.get(arr[i])) {
res[idx++] = arr[i];
}
}
return res;
}
}
时空复杂度 O ( n ) O(n) O(n)。