Redian新闻
>
面试题求解:remove first duplicate number from an array
avatar
面试题求解:remove first duplicate number from an array# JobHunting - 待字闺中
i*h
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.
avatar
O*D
2
第二个例子为什么5和2都去了?
avatar
z*b
3
时间空间复杂度有啥要求吗?
avatar
i*h
4
第二个例子是表示5和2都有重复,所以第一次出现的重复数字需要删除。

【在 O***D 的大作中提到】
: 第二个例子为什么5和2都去了?
avatar
i*h
5
最优能写成什么样?我想不到,所以想求大牛解答。

【在 z***b 的大作中提到】
: 时间空间复杂度有啥要求吗?
avatar
z*e
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;
avatar
i*h
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;

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。