由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - A家面筋:最多用一个循环,怎么去重复?
相关主题
被G电面给毙了请教一道题:Remove adjacent duplicate char recursively fro
Amazon 电面[第2轮]问个数组问题
相关话题的讨论汇总
话题: int话题: 0xff话题: 数组话题: 循环话题: 重复
进入JobHunting版参与讨论
1 (共1页)
w**********6
发帖数: 800
1
写这么一个函数,输入是一个数组和数组元素的个数,
要求把重复的数字去掉后输出,例:输入1939065123,输出1930652
重点在于,最多只能用一个循环,我还真没有想出来,大家讨论讨论,给点思路
y*******g
发帖数: 6599
2
不明白,难点在哪?

【在 w**********6 的大作中提到】
: 写这么一个函数,输入是一个数组和数组元素的个数,
: 要求把重复的数字去掉后输出,例:输入1939065123,输出1930652
: 重点在于,最多只能用一个循环,我还真没有想出来,大家讨论讨论,给点思路

p*****2
发帖数: 21240
3

lol

【在 y*******g 的大作中提到】
: 不明白,难点在哪?
c****p
发帖数: 6474
4
开个数组随便搞吧。。。。

【在 w**********6 的大作中提到】
: 写这么一个函数,输入是一个数组和数组元素的个数,
: 要求把重复的数字去掉后输出,例:输入1939065123,输出1930652
: 重点在于,最多只能用一个循环,我还真没有想出来,大家讨论讨论,给点思路

w**********6
发帖数: 800
5
我太菜了,所以才和大牛们讨论,能否给点psudo code?
谢谢

【在 y*******g 的大作中提到】
: 不明白,难点在哪?
p*****2
发帖数: 21240
6

先说说你的思路。

【在 w**********6 的大作中提到】
: 我太菜了,所以才和大牛们讨论,能否给点psudo code?
: 谢谢

z**q
发帖数: 41
7
这是坑么?
q****m
发帖数: 177
8
还真的不是很好想。比如 193 后面面的 9, 怎么判断已经出现过?

【在 w**********6 的大作中提到】
: 写这么一个函数,输入是一个数组和数组元素的个数,
: 要求把重复的数字去掉后输出,例:输入1939065123,输出1930652
: 重点在于,最多只能用一个循环,我还真没有想出来,大家讨论讨论,给点思路

p*****2
发帖数: 21240
9

hashset

【在 q****m 的大作中提到】
: 还真的不是很好想。比如 193 后面面的 9, 怎么判断已经出现过?
w**********6
发帖数: 800
10
我的思路是用是两个循环
设A数组是输入数组,B数组是输出数组
首先先把A数组的第一位赋给B数组
然后循环
一个大循环重复A数组的每一位
大循环里面套小循环,A数组的每一位都和B数组里面的元素逐个比,如果都没有,就把
他的值赋给B数组
然后A数组都循环了一边,就输出B数组
请教如何只用一个循环?

【在 p*****2 的大作中提到】
:
: hashset

相关主题
被G电面给毙了请教一道题:Remove adjacent duplicate char recursively fro
Amazon 电面[第2轮]问个数组问题
进入JobHunting版参与讨论
q****m
发帖数: 177
11
hashset 需要知道数值的范围吧?

【在 p*****2 的大作中提到】
:
: hashset

a********m
发帖数: 15480
12
数字只有那么几个吧。

【在 q****m 的大作中提到】
: hashset 需要知道数值的范围吧?
c****p
发帖数: 6474
13
只对0-9做hash吧。。。

【在 q****m 的大作中提到】
: hashset 需要知道数值的范围吧?
q****m
发帖数: 177
14
一语点破梦中人。

【在 a********m 的大作中提到】
: 数字只有那么几个吧。
y*******g
发帖数: 6599
15
需要hash么,0-9一个int就够了

【在 c****p 的大作中提到】
: 只对0-9做hash吧。。。
c****p
发帖数: 6474
16
我觉得也是啊。。。。我之前说开个数组就够了。。。

【在 y*******g 的大作中提到】
: 需要hash么,0-9一个int就够了
f*****7
发帖数: 92
17
一个byte就够了

【在 y*******g 的大作中提到】
: 需要hash么,0-9一个int就够了
y*******g
发帖数: 6599
18
不够吧,怎么弄?

【在 f*****7 的大作中提到】
: 一个byte就够了
p*****2
发帖数: 21240
19

只是数字开个数组就够了。

【在 c****p 的大作中提到】
: 我觉得也是啊。。。。我之前说开个数组就够了。。。
f*****7
发帖数: 92
20
额。。搞错了
2 bytes
抱歉

【在 y*******g 的大作中提到】
: 不够吧,怎么弄?
相关主题
Amazon 电面[第2轮]问个数组问题
请教一道题:Remove adjacent duplicate char recursively fro被G电面给毙了
进入JobHunting版参与讨论
l****c
发帖数: 782
21
lz,大牛不会给你代码的,让我们这样的小蚂蚁共勉吧,帮我挑挑错。
vector deleteDup(int* s, int N)
{
vector result;
bool flag[10] = {false};
for (int i = 0; i < N; i++) {
if (!flag[s[i]]) {
flag[s[i]] = true;
result.push_back(s[i]);
}
}
return result;
}
t******g
发帖数: 372
22
a家的面筋价格便宜量又足。。。

【在 w**********6 的大作中提到】
: 写这么一个函数,输入是一个数组和数组元素的个数,
: 要求把重复的数字去掉后输出,例:输入1939065123,输出1930652
: 重点在于,最多只能用一个循环,我还真没有想出来,大家讨论讨论,给点思路

w**********6
发帖数: 800
23

谢战友,我真是太菜了,楼上大牛们说的行话我都基本不懂啊。。。

【在 l****c 的大作中提到】
: lz,大牛不会给你代码的,让我们这样的小蚂蚁共勉吧,帮我挑挑错。
: vector deleteDup(int* s, int N)
: {
: vector result;
: bool flag[10] = {false};
: for (int i = 0; i < N; i++) {
: if (!flag[s[i]]) {
: flag[s[i]] = true;
: result.push_back(s[i]);
: }

l****c
发帖数: 782
24
我们这种菜鸟多看看贴吧还是,
我现在基本不敢说话了,
大牛都太牛了~~haha

【在 w**********6 的大作中提到】
:
: 谢战友,我真是太菜了,楼上大牛们说的行话我都基本不懂啊。。。

p*****2
发帖数: 21240
25

能不能inplace?

【在 l****c 的大作中提到】
: lz,大牛不会给你代码的,让我们这样的小蚂蚁共勉吧,帮我挑挑错。
: vector deleteDup(int* s, int N)
: {
: vector result;
: bool flag[10] = {false};
: for (int i = 0; i < N; i++) {
: if (!flag[s[i]]) {
: flag[s[i]] = true;
: result.push_back(s[i]);
: }

l****c
发帖数: 782
26
大牛是指做一个指针的容器吗?

【在 p*****2 的大作中提到】
:
: 能不能inplace?

p*****2
发帖数: 21240
27

输入输出都是同一个数组。不要另开数组。

【在 l****c 的大作中提到】
: 大牛是指做一个指针的容器吗?
p*****2
发帖数: 21240
28
写这么一个函数,输入是一个数组和数组元素的个数,
要求把重复的数字去掉后输出,例:输入1939065123,输出1930652
又看了一下题目。没有说一定是0-9的数字呀。
l****c
发帖数: 782
29
我也考虑了,但是,从lz的描述,我也只能这样理解了。。。至少给的example是这个
意思吧

【在 p*****2 的大作中提到】
: 写这么一个函数,输入是一个数组和数组元素的个数,
: 要求把重复的数字去掉后输出,例:输入1939065123,输出1930652
: 又看了一下题目。没有说一定是0-9的数字呀。

p*****2
发帖数: 21240
30

如果输入是int[],你还需要检查每一个元素是不是在0-9的范围之内?

【在 l****c 的大作中提到】
: 我也考虑了,但是,从lz的描述,我也只能这样理解了。。。至少给的example是这个
: 意思吧

相关主题
请教一道题:Remove adjacent duplicate char recursively fro被G电面给毙了
问个数组问题Amazon 电面[第2轮]
进入JobHunting版参与讨论
w**********6
发帖数: 800
31
他一开始没说是0-9的数字,后来看我为难,后来就说保证是0-9的数字,问我怎么做?
然后我还是不知道。。。

【在 p*****2 的大作中提到】
: 写这么一个函数,输入是一个数组和数组元素的个数,
: 要求把重复的数字去掉后输出,例:输入1939065123,输出1930652
: 又看了一下题目。没有说一定是0-9的数字呀。

p*****2
发帖数: 21240
32

if (!flag[s[i]]) {
你这行代码悬。

【在 l****c 的大作中提到】
: 我也考虑了,但是,从lz的描述,我也只能这样理解了。。。至少给的example是这个
: 意思吧

p*****2
发帖数: 21240
33

你用什么语言面试的?
面试官有没有要求inplace?

【在 w**********6 的大作中提到】
: 他一开始没说是0-9的数字,后来看我为难,后来就说保证是0-9的数字,问我怎么做?
: 然后我还是不知道。。。

w**********6
发帖数: 800
34

一会儿看我想不出,就下一题了。。。

【在 p*****2 的大作中提到】
:
: 你用什么语言面试的?
: 面试官有没有要求inplace?

p*****2
发帖数: 21240
35

这题还是可以扩展的。
比如输入的是int怎么办,inplace怎么办。
0-9和生成新的数组是最简单的。

【在 w**********6 的大作中提到】
:
: 一会儿看我想不出,就下一题了。。。

y*******g
发帖数: 6599
36
java面的话怎么inplace

【在 p*****2 的大作中提到】
:
: 这题还是可以扩展的。
: 比如输入的是int怎么办,inplace怎么办。
: 0-9和生成新的数组是最简单的。

c****f
发帖数: 1102
37
想想C真是复杂啊
某胶水语言的一行...
"1939065123".split(//).uniq.join
r***y
发帖数: 4379
38
考察的目的是算法
跟什么语言没关系
你这一行里面的 algorithm 是别人实现的, 答案不会被接受的

【在 c****f 的大作中提到】
: 想想C真是复杂啊
: 某胶水语言的一行...
: "1939065123".split(//).uniq.join

p*****2
发帖数: 21240
39

java也可以用同一个数组做输出吧?

【在 y*******g 的大作中提到】
: java面的话怎么inplace
l****c
发帖数: 782
40
敢问 c/c++ 如何用大数组作输入,输出同一个数组的一部分呢

【在 p*****2 的大作中提到】
:
: java也可以用同一个数组做输出吧?

相关主题
问个数组问题Amazon 电面[第2轮]
被G电面给毙了请教一道题:Remove adjacent duplicate char recursively fro
进入JobHunting版参与讨论
p*****2
发帖数: 21240
41

有length的。

【在 l****c 的大作中提到】
: 敢问 c/c++ 如何用大数组作输入,输出同一个数组的一部分呢
d**********x
发帖数: 4083
42
这题不是显然问你bit map嘛
然后你说bit map了他就问你如果扩大到int范围怎么弄
你就答用hash
然后就没有然后了

【在 w**********6 的大作中提到】
: 写这么一个函数,输入是一个数组和数组元素的个数,
: 要求把重复的数字去掉后输出,例:输入1939065123,输出1930652
: 重点在于,最多只能用一个循环,我还真没有想出来,大家讨论讨论,给点思路

l****c
发帖数: 782
43
我能想到的inplace可能就是用vector, 存在前面,然后resize了
不知道满足2爷的面试要求不

【在 p*****2 的大作中提到】
:
: 有length的。

p*****2
发帖数: 21240
44

如果C的话没有vector,你可以这样
int removeDup(int* arr, int inLen, int* outLen)

【在 l****c 的大作中提到】
: 我能想到的inplace可能就是用vector, 存在前面,然后resize了
: 不知道满足2爷的面试要求不

l****c
发帖数: 782
45
嗯,原来是这样啊,谢了兄台~
很早前遇到类似的问题就直接vector了。。。
学习了

【在 p*****2 的大作中提到】
:
: 如果C的话没有vector,你可以这样
: int removeDup(int* arr, int inLen, int* outLen)

c****f
发帖数: 1102
46
你说的没错
不过我一直有个疑问
语言的发展越来越高级 机器的性能越来越强大
未来的发展方向肯定是趋向于英语的计算机高级语言.
如果可以在程序的某些部分 甚至大部分 写的时候不用去考虑具体怎么实现的 因为算
法别人都实现了 只是运用 未尝不可能呢 或者说这应该是种趋势吧?
比如有句话
x.each |x| do x end
你不需要知道x.each到底是干嘛的 只要知道他返回的X是循环数组内元素
现阶段这类语言性能都不强 所以我是指未来的发展
my 2 cents

【在 r***y 的大作中提到】
: 考察的目的是算法
: 跟什么语言没关系
: 你这一行里面的 algorithm 是别人实现的, 答案不会被接受的

p*****2
发帖数: 21240
47

难说。

【在 c****f 的大作中提到】
: 你说的没错
: 不过我一直有个疑问
: 语言的发展越来越高级 机器的性能越来越强大
: 未来的发展方向肯定是趋向于英语的计算机高级语言.
: 如果可以在程序的某些部分 甚至大部分 写的时候不用去考虑具体怎么实现的 因为算
: 法别人都实现了 只是运用 未尝不可能呢 或者说这应该是种趋势吧?
: 比如有句话
: x.each |x| do x end
: 你不需要知道x.each到底是干嘛的 只要知道他返回的X是循环数组内元素
: 现阶段这类语言性能都不强 所以我是指未来的发展

r**d
发帖数: 90
48
void RemoveDup(char* in)
{
char *curr = in;
char *end = in;
int used[256] = {0};
do
{
if (used[*end] == 0)
{
end ++;
}
}while (*curr = *end);
}

【在 w**********6 的大作中提到】
: 写这么一个函数,输入是一个数组和数组元素的个数,
: 要求把重复的数字去掉后输出,例:输入1939065123,输出1930652
: 重点在于,最多只能用一个循环,我还真没有想出来,大家讨论讨论,给点思路

r**d
发帖数: 90
49
forgot:
else use[*end] =1;

【在 r**d 的大作中提到】
: void RemoveDup(char* in)
: {
: char *curr = in;
: char *end = in;
: int used[256] = {0};
: do
: {
: if (used[*end] == 0)
: {
: end ++;

r***y
发帖数: 4379
50
你说说小学生现在为啥还从 1+1 ... 九九表... 学
费纸费事费人力
不一人扔个五块钱的计算器让他们按button拉倒呢
所以fresh找饭碗,基本东西还是跑不了
至于趋势... 太远了, 不是在这版上混的说了算的...

【在 c****f 的大作中提到】
: 你说的没错
: 不过我一直有个疑问
: 语言的发展越来越高级 机器的性能越来越强大
: 未来的发展方向肯定是趋向于英语的计算机高级语言.
: 如果可以在程序的某些部分 甚至大部分 写的时候不用去考虑具体怎么实现的 因为算
: 法别人都实现了 只是运用 未尝不可能呢 或者说这应该是种趋势吧?
: 比如有句话
: x.each |x| do x end
: 你不需要知道x.each到底是干嘛的 只要知道他返回的X是循环数组内元素
: 现阶段这类语言性能都不强 所以我是指未来的发展

相关主题
被G电面给毙了请教一道题:Remove adjacent duplicate char recursively fro
Amazon 电面[第2轮]问个数组问题
进入JobHunting版参与讨论
m**********0
发帖数: 356
51
你这个碰到第一个重复就跳出循环了吧?

【在 r**d 的大作中提到】
: void RemoveDup(char* in)
: {
: char *curr = in;
: char *end = in;
: int used[256] = {0};
: do
: {
: if (used[*end] == 0)
: {
: end ++;

m**********0
发帖数: 356
52
C/C++的话循环时记住最后一个没有重复的位置x,然后把ith的值挪到[x+1]应该就可以
。java应该也可以的。。。。我猜的,别砸我。。。

【在 y*******g 的大作中提到】
: java面的话怎么inplace
r**d
发帖数: 90
53
不会,只有到end of string,才跳出循环

【在 m**********0 的大作中提到】
: 你这个碰到第一个重复就跳出循环了吧?
l********7
发帖数: 19
54
本来两重循环足够了, 只让用一层循环,咱就用一层循环,加个递归还不行啊 :)
i****y
发帖数: 58
55
只用一个循环的恐怕不行吧。。
求大牛指点。。。

【在 y*******g 的大作中提到】
: java面的话怎么inplace
m**********0
发帖数: 356
56
你run下code试试?

【在 r**d 的大作中提到】
: 不会,只有到end of string,才跳出循环
p*****2
发帖数: 21240
57

java和C有啥区别呀?

【在 i****y 的大作中提到】
: 只用一个循环的恐怕不行吧。。
: 求大牛指点。。。

c********t
发帖数: 5706
58
青蛙没懂难点,写一个让大家笑话指正吧。是不是难点在于怎么让inplace的数组size
缩短?俺不会,全补0了。
public void delDup(int[] a) {
if (a == null || a.length == 0)
return;
int j = 0;
int[] s = new int[10];
for (int i : a) {
if (s[i] == 0) {
a[j++] = i;
s[i] = 1;
}
}
while (j < a.length)
a[j++] = 0;
}

【在 i****y 的大作中提到】
: 只用一个循环的恐怕不行吧。。
: 求大牛指点。。。

w**********6
发帖数: 800
59
的确,一个数组就搞定了
哎,差距很大,继续努力啊!
i****y
发帖数: 58
60
inplace 的话,我能想到是每碰到一个重复之后,要把后面的全往前移,
也就是大循环里套小循环,我不知道这算不算一个循环。。。
如果不考虑顺序 可以Swap最后一个和当前重复的那个。。。

【在 p*****2 的大作中提到】
:
: java和C有啥区别呀?

相关主题
被G电面给毙了请教一道题:Remove adjacent duplicate char recursively fro
Amazon 电面[第2轮]问个数组问题
进入JobHunting版参与讨论
t********g
发帖数: 33
61
这是careercup原题,根本就不需要额外的数组什么的,只需要额外的两个variable,
就可以实现。
w**********6
发帖数: 800
62
我写的菜鸟code,请二爷看看,然后能否提示一下,如果不保证输入是0-9的话怎么搞
?感觉还是这么搞的话貌似不靠谱,大小写字母加一块儿太多了。。。
void rmdup(int a[],int n)
{
int b[10] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};

for(int i=0;i {
b[a[i]] = a[i];
}

//print it out

for(int i=0;i {
if(b[i]!=0xFF)
{
printf("%d ",b[i]);
}
}

}

【在 p*****2 的大作中提到】
: 写这么一个函数,输入是一个数组和数组元素的个数,
: 要求把重复的数字去掉后输出,例:输入1939065123,输出1930652
: 又看了一下题目。没有说一定是0-9的数字呀。

b***m
发帖数: 5987
63

正确。一个i从头到位遍历各个数字,一个j记录上一个重复的位置(默认设-1),发现
后面最早不重复的数字,就把那个数字copy到i的位置,然后j加1,如此循环直到i到数
组的最末,此事j就是新数组的结尾。当然,还需要一个hashtab来记录哪些数字已经出
现过了。声明:我没看过careercup,这个思路也是我临时想的,请大家指正。

【在 t********g 的大作中提到】
: 这是careercup原题,根本就不需要额外的数组什么的,只需要额外的两个variable,
: 就可以实现。

p*****2
发帖数: 21240
64

hashtable还不是额外的空间吗?

【在 b***m 的大作中提到】
:
: 正确。一个i从头到位遍历各个数字,一个j记录上一个重复的位置(默认设-1),发现
: 后面最早不重复的数字,就把那个数字copy到i的位置,然后j加1,如此循环直到i到数
: 组的最末,此事j就是新数组的结尾。当然,还需要一个hashtab来记录哪些数字已经出
: 现过了。声明:我没看过careercup,这个思路也是我临时想的,请大家指正。

p*****2
发帖数: 21240
65

不是0-9的话用hashset

【在 w**********6 的大作中提到】
: 我写的菜鸟code,请二爷看看,然后能否提示一下,如果不保证输入是0-9的话怎么搞
: ?感觉还是这么搞的话貌似不靠谱,大小写字母加一块儿太多了。。。
: void rmdup(int a[],int n)
: {
: int b[10] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
:
: for(int i=0;i: {
: b[a[i]] = a[i];
: }

b***m
发帖数: 5987
66
是哦,那咋整啊。

【在 p*****2 的大作中提到】
:
: 不是0-9的话用hashset

p*****2
发帖数: 21240
67

所以我没看明白只用两个变量怎么搞。

【在 b***m 的大作中提到】
: 是哦,那咋整啊。
s********k
发帖数: 6180
68
有个明显bug啊,while里面应该是while(*curr++=*end++)吧

【在 r**d 的大作中提到】
: void RemoveDup(char* in)
: {
: char *curr = in;
: char *end = in;
: int used[256] = {0};
: do
: {
: if (used[*end] == 0)
: {
: end ++;

1 (共1页)
进入JobHunting版参与讨论
相关主题
被G电面给毙了请教一道题:Remove adjacent duplicate char recursively fro
Amazon 电面[第2轮]问个数组问题
相关话题的讨论汇总
话题: int话题: 0xff话题: 数组话题: 循环话题: 重复