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 | |
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
|
|
|
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 的大作中提到】 : 不够吧,怎么弄?
|
|
|
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是这个 : 意思吧
|
|
|
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也可以用同一个数组做输出吧?
|
|
|
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是循环数组内元素 : 现阶段这类语言性能都不强 所以我是指未来的发展
|
|
|
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有啥区别呀?
|
|
|
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 ++;
|