Redian新闻
>
爸爸和一个不到5岁的男孩一起过圣诞,求建议
avatar
爸爸和一个不到5岁的男孩一起过圣诞,求建议# Parenting - 为人父母
j*l
1
在最短的时间内写出一个C函数,用来统计一个字符串中单词的个数。假定空格为分隔
符。程序只准使用一重循环。要求又快又对,如果超时或者有bug, 这轮面试算失败
后续感想:
即使是很简单的题目,要在面试时候发挥好也不是那么容易,需要多练。
首先面试官会有一些特殊要求,比如这题的只许用一重循环。通常情况下大家都习惯用
两重循环,第一重找到单词开头,第二重跳过整个单词。PIE书里头反转字符串中的每
个单词那个例程,就用了两重循环。
另外如果没有想到问题的实质是检测脉冲,可能会走弯路。程序对开头有没有空格,结
尾有没有空格,以及全部是空格,全部是非空格这些情况都要能涵盖到。
程序是否简洁也很重要。比如用到的flag个数是否可以减少。比如你可以用到两个flag
,一个表示单词刚开始,一个表示在扫描整个单词的所有字符。但后者不是必需的,而
且容易让程序变复杂,容易出错。
对简单题,时间要求和bug free的要求是很严格的。写在白板上的code是否简洁干净也很重要
其实,面试并不一定是用难题来考倒人。简单题一样可以考察面试者的基本功。如果看
了大量的难题,结果面试的时候却栽在简单题上,是很可惜的。
avatar
a*h
2
孩子妈妈需要回中国几个星期,剩下孩子爸爸和一个不到5岁的男孩一起过圣诞。大家有
什么建议马?自己带儿子去disney或者滑雪,不知道自己是否搞得定
avatar
y*w
3
数数空格个数嘛。 多个空格,特殊符号,开头空格这些情况注意下。

【在 j**l 的大作中提到】
: 在最短的时间内写出一个C函数,用来统计一个字符串中单词的个数。假定空格为分隔
: 符。程序只准使用一重循环。要求又快又对,如果超时或者有bug, 这轮面试算失败
: 后续感想:
: 即使是很简单的题目,要在面试时候发挥好也不是那么容易,需要多练。
: 首先面试官会有一些特殊要求,比如这题的只许用一重循环。通常情况下大家都习惯用
: 两重循环,第一重找到单词开头,第二重跳过整个单词。PIE书里头反转字符串中的每
: 个单词那个例程,就用了两重循环。
: 另外如果没有想到问题的实质是检测脉冲,可能会走弯路。程序对开头有没有空格,结
: 尾有没有空格,以及全部是空格,全部是非空格这些情况都要能涵盖到。
: 程序是否简洁也很重要。比如用到的flag个数是否可以减少。比如你可以用到两个flag

avatar
i*e
4
5岁的男娃,应该搞得定
或者,你想一下根据你娃的个性,容易搞不定的是什么事情什么时候
再提前例几个作战方案就好了 :)
enjoy holiday!

家有

【在 a*****h 的大作中提到】
: 孩子妈妈需要回中国几个星期,剩下孩子爸爸和一个不到5岁的男孩一起过圣诞。大家有
: 什么建议马?自己带儿子去disney或者滑雪,不知道自己是否搞得定

avatar
b*v
5
unsigned int countWords(char* a)
{
unsigned int t=0, i;
bool flag=false; /* whether the previous char is space */
for(i=0;a[i]!='\0';i++) {
if(a[i]==' ') {
if(flag==false)
t++;
flag = true;
}
if(a[i]!=' ') {
flag = false;
}
}
if(a[0] == ' ')
return t;
else
return t+1;
}

【在 j**l 的大作中提到】
: 在最短的时间内写出一个C函数,用来统计一个字符串中单词的个数。假定空格为分隔
: 符。程序只准使用一重循环。要求又快又对,如果超时或者有bug, 这轮面试算失败
: 后续感想:
: 即使是很简单的题目,要在面试时候发挥好也不是那么容易,需要多练。
: 首先面试官会有一些特殊要求,比如这题的只许用一重循环。通常情况下大家都习惯用
: 两重循环,第一重找到单词开头,第二重跳过整个单词。PIE书里头反转字符串中的每
: 个单词那个例程,就用了两重循环。
: 另外如果没有想到问题的实质是检测脉冲,可能会走弯路。程序对开头有没有空格,结
: 尾有没有空格,以及全部是空格,全部是非空格这些情况都要能涵盖到。
: 程序是否简洁也很重要。比如用到的flag个数是否可以减少。比如你可以用到两个flag

avatar
d*e
6
我家是爸爸回国五周多,我一人带六岁女儿。但是我公开表示毫无压力。我家孩子爸爸
今年上半年也单独带我家女儿一个月过,挺顺利的。
一个人带孩子,关键要耐心再耐心。和孩子在一起的时候不要三心二意,想着工作或者
想着上网娱乐啥的。另外就是多去朋友家坐坐,一些play date啥的,孩子也不会太没
意思。

家有

【在 a*****h 的大作中提到】
: 孩子妈妈需要回中国几个星期,剩下孩子爸爸和一个不到5岁的男孩一起过圣诞。大家有
: 什么建议马?自己带儿子去disney或者滑雪,不知道自己是否搞得定

avatar
d*e
7
so fast.. i was just done, but you've posted it

【在 b******v 的大作中提到】
: unsigned int countWords(char* a)
: {
: unsigned int t=0, i;
: bool flag=false; /* whether the previous char is space */
: for(i=0;a[i]!='\0';i++) {
: if(a[i]==' ') {
: if(flag==false)
: t++;
: flag = true;
: }

avatar
r*f
8
都快5岁了,还是男孩,爸爸怎么会搞不定

家有

【在 a*****h 的大作中提到】
: 孩子妈妈需要回中国几个星期,剩下孩子爸爸和一个不到5岁的男孩一起过圣诞。大家有
: 什么建议马?自己带儿子去disney或者滑雪,不知道自己是否搞得定

avatar
j*l
9
可以把空格看成0,非空格看成1,这样原题就类似找脉冲,可以用差分的思想,也可以
直接找脉冲上跳处和下跳处。
你的方法应该是属于找脉冲下跳处吧,可能找上跳处更直观。
不过如果全部是空格,你的方法至少返回1?

【在 b******v 的大作中提到】
: unsigned int countWords(char* a)
: {
: unsigned int t=0, i;
: bool flag=false; /* whether the previous char is space */
: for(i=0;a[i]!='\0';i++) {
: if(a[i]==' ') {
: if(flag==false)
: t++;
: flag = true;
: }

avatar
a*h
10
俺还要全时上班呢,今年的假期只剩下3天了

【在 r*f 的大作中提到】
: 都快5岁了,还是男孩,爸爸怎么会搞不定
:
: 家有

avatar
b*v
11
嗯,我的程序是有个bug
最后还应该判断一下最后一个字符是否是空格

【在 j**l 的大作中提到】
: 可以把空格看成0,非空格看成1,这样原题就类似找脉冲,可以用差分的思想,也可以
: 直接找脉冲上跳处和下跳处。
: 你的方法应该是属于找脉冲下跳处吧,可能找上跳处更直观。
: 不过如果全部是空格,你的方法至少返回1?

avatar
h*e
12
不去玩的话,可以去别人家参加party,或者请人来家开potluck party或者买外卖。
去disney应该可以吧。爸爸原来去过没有?去过的话路数熟了更应该有把握。最重要的
就是别把孩子丢了。让孩子牢记爸爸的名字,电话,家庭住址等,再写个信息卡放孩子
衣服兜里,最好是教孩子自己会写下来。

家有

【在 a*****h 的大作中提到】
: 孩子妈妈需要回中国几个星期,剩下孩子爸爸和一个不到5岁的男孩一起过圣诞。大家有
: 什么建议马?自己带儿子去disney或者滑雪,不知道自己是否搞得定

avatar
r*o
13
我先献丑,请多多指教。
int Countwords(const char *str, const int len)
{
int count=0;
if (len==0) return 0;
for (int i=0; i{
if ((str[i]!=' ')&&(str[i+1]==' '))
count++;
}

if (str[len-1]!=' ')
count++;

return count;

}

【在 j**l 的大作中提到】
: 在最短的时间内写出一个C函数,用来统计一个字符串中单词的个数。假定空格为分隔
: 符。程序只准使用一重循环。要求又快又对,如果超时或者有bug, 这轮面试算失败
: 后续感想:
: 即使是很简单的题目,要在面试时候发挥好也不是那么容易,需要多练。
: 首先面试官会有一些特殊要求,比如这题的只许用一重循环。通常情况下大家都习惯用
: 两重循环,第一重找到单词开头,第二重跳过整个单词。PIE书里头反转字符串中的每
: 个单词那个例程,就用了两重循环。
: 另外如果没有想到问题的实质是检测脉冲,可能会走弯路。程序对开头有没有空格,结
: 尾有没有空格,以及全部是空格,全部是非空格这些情况都要能涵盖到。
: 程序是否简洁也很重要。比如用到的flag个数是否可以减少。比如你可以用到两个flag

avatar
s*l
14
就是,我家老公带个一岁多的男孩呢。

【在 r*f 的大作中提到】
: 都快5岁了,还是男孩,爸爸怎么会搞不定
:
: 家有

avatar
b*v
15
修改后的程序
unsigned int countWords(char* a)
{
unsigned int t=0, i;
char pre = a[0];
for(i=0;a[i]!='\0';i++) {
if(a[i]==' ') {
if(pre!=' ')
t++;
}
pre = a[i];
}
if(pre == ' ') /* the last char is a space */
return t;
else
return t+1;
}

【在 j**l 的大作中提到】
: 可以把空格看成0,非空格看成1,这样原题就类似找脉冲,可以用差分的思想,也可以
: 直接找脉冲上跳处和下跳处。
: 你的方法应该是属于找脉冲下跳处吧,可能找上跳处更直观。
: 不过如果全部是空格,你的方法至少返回1?

avatar
d*e
16
this one is good..

【在 r****o 的大作中提到】
: 我先献丑,请多多指教。
: int Countwords(const char *str, const int len)
: {
: int count=0;
: if (len==0) return 0;
: for (int i=0; i: {
: if ((str[i]!=' ')&&(str[i+1]==' '))
: count++;
: }

avatar
j*l
17
用到flag的思路很好,但为什么不去找脉冲上跳处呢(前面为空格,后面为非空格)
另外a是空指针(不是空串)没处理。

【在 b******v 的大作中提到】
: 修改后的程序
: unsigned int countWords(char* a)
: {
: unsigned int t=0, i;
: char pre = a[0];
: for(i=0;a[i]!='\0';i++) {
: if(a[i]==' ') {
: if(pre!=' ')
: t++;
: }

avatar
b*v
18
多谢,当时我的思路是找所有的空格,再考虑边界情况加一或减一,
所以就变成了找脉冲下跳处了
a是空串我修改后的程序也能处理的
pre初始为空格,所以后面遇到一串空格,计数器t不会增加

【在 j**l 的大作中提到】
: 用到flag的思路很好,但为什么不去找脉冲上跳处呢(前面为空格,后面为非空格)
: 另外a是空指针(不是空串)没处理。

avatar
b*v
19
其实原来用flag的程序修改一下也能用
主要改动是把flag初始为true,而不是false
这样就能处理初始字符为空格的情况
并且最后判断最后一个字符是否为空格,
这样就能处理最后字符是空格的情况
由于每次只用写1bit,估计比用pre字符的会稍微快一点
unsigned int countWords(char* a)
{
unsigned int t=0, i;
bool flag=true; /* whether the previous char is space */
for(i=0;a[i]!='\0';i++) {
if(a[i]==' ') {
if(flag==false)
t++;
flag = true;
}
if(a[i]!=' ') {
flag = false;
}
}
if(flag == true) /* the last char is space */
return t;
else
return t+1;
}

【在 b******v 的大作中提到】
: 多谢,当时我的思路是找所有的空格,再考虑边界情况加一或减一,
: 所以就变成了找脉冲下跳处了
: a是空串我修改后的程序也能处理的
: pre初始为空格,所以后面遇到一串空格,计数器t不会增加

avatar
j*l
20
我说的是空指针(注意和空串的不同,空串指向"\0",是非空指针)
如果 a == NULL,
a[0]会让程序crash

【在 b******v 的大作中提到】
: 多谢,当时我的思路是找所有的空格,再考虑边界情况加一或减一,
: 所以就变成了找脉冲下跳处了
: a是空串我修改后的程序也能处理的
: pre初始为空格,所以后面遇到一串空格,计数器t不会增加

avatar
j*l
21
还有一种方法不需要任何flag
int t = 0;
for (int i = 0; a[i] != '\0'; i++)
{
if (a[i] != ' ')
{
// 利用了 || 操作符的短路操作
if (i == 0 || a[i-1] == ' ')
t++;
}
}
return t;
avatar
b*v
22
有道理
应该开头加一句
if(a == NULL)
return 0;

【在 j**l 的大作中提到】
: 我说的是空指针(注意和空串的不同,空串指向"\0",是非空指针)
: 如果 a == NULL,
: a[0]会让程序crash

avatar
b*v
23
程序很漂亮
确实考虑脉冲上跳处,程序更简单

【在 j**l 的大作中提到】
: 还有一种方法不需要任何flag
: int t = 0;
: for (int i = 0; a[i] != '\0'; i++)
: {
: if (a[i] != ' ')
: {
: // 利用了 || 操作符的短路操作
: if (i == 0 || a[i-1] == ' ')
: t++;
: }

avatar
j*l
24
由此想到,即使是很简单的题目,要在面试时候发挥好也不是那么容易,需要多练。
首先面试官会有一些特殊要求,比如这题的只许用一重循环。通常情况下大家都习惯用
两重循环,第一重找到单词开头,第二重跳过整个单词。PIE书里头反转字符串中的每
个单词那个例程,就用了两重循环。
另外如果没有想到问题的实质是检测脉冲,可能会走弯路。程序对开头有没有空格,结
尾有没有空格,以及全部是空格,全部是非空格这些情况都要能涵盖到。
程序是否简洁也很重要。比如用到的flag个数是否可以减少。比如你可以用到两个flag
,一个表示单词刚开始,一个表示在扫描整个单词的所有字符。但后者不是必需的,而
且容易让程序变复杂,容易出错。
对简单题,时间要求和bug free的要求是很严格的
其实,面试并不一定是用难题来考倒人。简单题一样可以考察面试者的基本功。如果看
了大量的难题,结果面试的时候却栽在简单题上,是很可惜的。
其实大家看了那么多难题名题,也决不能忽视对简单题的练习。或许大家还真应该希望碰上的都是见过的难题名题。当碰到一道看去很简单的问题,不可窃喜和掉以轻心,一定要注意有没有什么附加限制,有没有什么陷阱,尽量快
avatar
b*v
25
我amazon一面时就遇到这样的情况
一道很简单的题,怎样判断两个BST是否相同
结果我给了判断inorder traversal和preorder traversal是否相同的解法,并coding
用掉了面试大部分的时间
其实只需要用递归判断当前节点,左子树,右子树是否相同就可以了
好在他们还是给了我二面的机会,希望我不会再次搞砸

flag

【在 j**l 的大作中提到】
: 由此想到,即使是很简单的题目,要在面试时候发挥好也不是那么容易,需要多练。
: 首先面试官会有一些特殊要求,比如这题的只许用一重循环。通常情况下大家都习惯用
: 两重循环,第一重找到单词开头,第二重跳过整个单词。PIE书里头反转字符串中的每
: 个单词那个例程,就用了两重循环。
: 另外如果没有想到问题的实质是检测脉冲,可能会走弯路。程序对开头有没有空格,结
: 尾有没有空格,以及全部是空格,全部是非空格这些情况都要能涵盖到。
: 程序是否简洁也很重要。比如用到的flag个数是否可以减少。比如你可以用到两个flag
: ,一个表示单词刚开始,一个表示在扫描整个单词的所有字符。但后者不是必需的,而
: 且容易让程序变复杂,容易出错。
: 对简单题,时间要求和bug free的要求是很严格的

avatar
t*e
26
what about this?
#include
#include
using namespace std;
unsigned int CountWord(const char* ch)
{
unsigned int cnt=0;
bool flag=true; /*check for consecutive spaces*/
if (ch==NULL)
return cnt;
for (size_t i=0; ch[i]!='\0'; ++i)
{
if (ch[i]==' ' && flag==false)
{++cnt;flag=true;}
if (ch[i]!=' ')
flag=false;
}
if (flag==false)
++cnt;
return cnt;
}

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