i*****h 发帖数: 1534 | 1 LC只刷了60题,今天面试碰到个题(不知道lc里有没有,粗略扫了一遍题目名字没看到
),求思路。
题目:一个array里有一组或以上重复的数字(可能只有一组,可能有几组),需要
remove第一次出现的重复的数字,然后顺序要保持和原来一样。
比如:
{1,5,2,3,5,4,5,6}-> {1,2,3,5,4,5,6}
{1,5,2,3,2,5,4,5,6} ->{1,3,2,5,4,5,6}
求思路求解,谢谢了!
我能想到的就只有用hashmap. |
O***D 发帖数: 206 | |
z***b 发帖数: 127 | |
i*****h 发帖数: 1534 | 4 第二个例子是表示5和2都有重复,所以第一次出现的重复数字需要删除。
【在 O***D 的大作中提到】 : 第二个例子为什么5和2都去了?
|
i*****h 发帖数: 1534 | 5 最优能写成什么样?我想不到,所以想求大牛解答。
【在 z***b 的大作中提到】 : 时间空间复杂度有啥要求吗?
|
z*********e 发帖数: 10149 | 6 可能不算最优,扫两遍
int len = A.length;
Set s = new HashSet<>();
Set dupeSet = new HashSet<>();
for(int i = 0; i < len; i++){
if(s.contains(A[i])) dupeSet.add(A[i]);
s.add(A[i]);
}
int[] res = new int[len - dupeSet.size()];
int index = 0;
for(int i = 0; i < len ;i++){
if(!dupeSet.contains(A[i])) res[index++] = A[i];
else dupeSet.remove(A[i]);
}
return res; |
i*****h 发帖数: 1534 | 7 等会我看下,先多谢了!
【在 z*********e 的大作中提到】 : 可能不算最优,扫两遍 : int len = A.length; : Set s = new HashSet<>(); : Set dupeSet = new HashSet<>(); : for(int i = 0; i < len; i++){ : if(s.contains(A[i])) dupeSet.add(A[i]); : s.add(A[i]); : } : int[] res = new int[len - dupeSet.size()]; : int index = 0;
|