avatar
c*r
1
Given a string of sorted integers, e.g. "1 52 69 456789 994546566";
and a a number e.g. 69.
You need to tell if it is in the input, e.g. 69=>true.
Write the code using the fastest algorithm.
avatar
z*j
3
被区长表扬了我的莴笋苗长得好,让我忍不住要得瑟一下我自己DIY的grow light box
,(新人有了一点小成绩就特别爱得瑟,请大家忍耐哈)。经过大概10天的体验,我可
以很傲娇地说:这个简易版的grow light box真好用,我的莴笋小苗可以长得这么结实
,完全是它的功劳!
在网上查过,育苗期间,幼苗最好有光照12-16小时。我家东西朝向,能够晒苗的时间
很有限,于是就萌生了建一个Grow Light Station的念头。现成的Grow Light挺贵的,
第一年当农民,也不知会不会是黑手指,不敢投入太大,就在网上寻找DIY的可能性。
网上DIY的grow Light 版本很多,有的相对复杂。本着低成本,易操作的原则,我最后
参考了Youtube上的种菜达人Gary Pilarchik的办法,并在使用当中根据自己的体会,
进行了一些改良。(PS: 我挺喜欢看Gary的channel,很适合新手)
Gary 版的制作视频在这:
下面直接说说我使用的材料:
1.Storage Tote:我做了两个,用的盒子分别是11 gallon 和15 gallon。 15 gallon
的比11 gallon的高一寸多一点。
2.CFL 节能灯泡。我用的灯泡是这个:23 w (100 equivalent),1600 lumens,
5000K。
http://www.lowes.com/ProductDisplay?partNumber=345544-43921-YK5
Gary在视频里提到了灯泡选择时要注意的参数,这点需要格外注意。
3.Clamp Light。 这个Home Depot 等Big Box店都有,我是在Amazon上为了凑单而买的
,价钱差不多。(我当时买的时候是$8.44/个)
http://www.amazon.com/Woods-0151-8-5-Inch-Reflector-150-Watt/dp
4.我后来觉得,Clamp Light也挺贵的,用起来有局限性,也不是特别方便,又经过一
番寻找,我发现了一个很好的替代品,就是plug-in socket。我买的是这个:
http://www.homedepot.com/p/Leviton-White-Outlet-to-Socket-Light
剩下要用到的就是家家都应该有的锡箔纸,duct tape和extension cord了。
我最开始是完全copy 了Gary的版本,只是他为了固定clamp light,切割了tote的盖子
,我想保留盖子以后继续用,就用Costco给的免费装东西的纸盒替代了,而且纸盒割起
来更容易一些。制作出来的成品是这样的:
内部:
盖子:
这个版本的盒子用起来其实效果还可以,要保证垂下去的灯头跟小苗保持1-2寸的距离
,我第一批小苗就是在这个盒子里育的。不过,通过观察发现,四周离中心灯头远一点
的小苗还是有轻度的朝灯源方向倾斜的趋势,所以要调换位置来矫正。毕竟,灯泡只有
1600 lumens,据说光照理想状态是3000 lumens以上,但因为盒子四壁和盖子都贴了锡
箔纸反光,一定程度的增加了光的强度。这个盒子比较适合中间照已经发芽的小苗,四
周放刚埋进去的种子。灯泡散热,可以加速种子萌发。
随着发芽了的种子越来越多,上面盒子的局限性就比较明显了(总是给育苗盒换地方有
点麻烦),我就想增加光照的强度和覆盖面,于是改良了盖子,用上了两个灯泡。
内部:
外部:
哇,这个改良后的版本效果非常明显,两个灯泡的亮度有3200 lumens了,那些之前有
点歪歪扭扭的小苗,几个小时后身板就挺得直直的,叶子也打开了!用这个version需
要注意一点是,因为两个灯泡散热比较多,盒子里面会有点热,所以我选择稍微深一点
的盒子,让苗离灯头稍微远一点,而且盖子也没盖得太严,适当的给盒子透透气。
这是盒子里正在育的小苗的近照,圆叶子的是莴笋,尖叶子的是刚刚出头的辣椒和茄子苗
我觉得,这个盒子对于刚出土的小苗非常有用,因为这些小苗太小了,光照不够就长成
豆芽菜,在窗台上晒太阳也非常容易变成歪脖树。放在盒子里,小苗可以长得比较直,
也长得快一些。等到苗大了一些,特别是长出了真叶以后,放在窗台上晒太阳可能就足
够了。当然,如果有条件在室外晒太阳,那就最好了。
使用这个DIY Box要注意两点:
1.安全问题。我只用了这个盒子10来天,具体会有什么安全隐患我现在还不得知,但希
望如果你也采用这个方法,还是适当的谨慎一些,因为这个盒子毕竟比较简陋。不过,
灯泡是节能灯泡,两个灯泡也就46 W,低于一个普通的60W灯泡,另外节能灯泡虽然会
散热,但本身不是很烫。我个人觉得因为用电过量引起火灾的可能性比较小。但是为了
安全起见,我都是在家里有人的情况下使用,出门或者晚上睡觉的时候关闭。
2.这个灯不需要24小时开,植物也需要睡眠时间。一般我睡觉,也让小苗睡觉,早上起
来会发现经过一晚上,苗又变大了,呵呵。
嗯,以上就是我的科学小制作,虽然简陋,但效果还是让我挺满意的。对于那些总是育
成豆芽菜苗的同学,不妨试试这个方法吧。
avatar
H*g
4
哼哼哈嘿
avatar
h*l
5
这个binary search阿
上次那个谁说过

【在 c**********r 的大作中提到】
: Given a string of sorted integers, e.g. "1 52 69 456789 994546566";
: and a a number e.g. 69.
: You need to tell if it is in the input, e.g. 69=>true.
: Write the code using the fastest algorithm.

avatar
g*e
7
赞!
建议为确保安全,放在烟雾警报器附近。

box

【在 z**j 的大作中提到】
: 被区长表扬了我的莴笋苗长得好,让我忍不住要得瑟一下我自己DIY的grow light box
: ,(新人有了一点小成绩就特别爱得瑟,请大家忍耐哈)。经过大概10天的体验,我可
: 以很傲娇地说:这个简易版的grow light box真好用,我的莴笋小苗可以长得这么结实
: ,完全是它的功劳!
: 在网上查过,育苗期间,幼苗最好有光照12-16小时。我家东西朝向,能够晒苗的时间
: 很有限,于是就萌生了建一个Grow Light Station的念头。现成的Grow Light挺贵的,
: 第一年当农民,也不知会不会是黑手指,不敢投入太大,就在网上寻找DIY的可能性。
: 网上DIY的grow Light 版本很多,有的相对复杂。本着低成本,易操作的原则,我最后
: 参考了Youtube上的种菜达人Gary Pilarchik的办法,并在使用当中根据自己的体会,
: 进行了一些改良。(PS: 我挺喜欢看Gary的channel,很适合新手)

avatar
d*e
8
这个红圈真是破坏整体效果。
avatar
l*a
9
string to integer array
need extra memory...
what will you know if there no extra memory?

【在 h**********l 的大作中提到】
: 这个binary search阿
: 上次那个谁说过

avatar
b*r
10
理解你的心情,但我们也经常去那里下载模板,参考别的信息,所以是否可以理解为互
相借鉴,只要最终能够帮助大家申请拿到绿卡,其他的相对都是次要的了,不知道版务
这么说你是否觉得合理,还SUFFER的话PM我啊~~~~~~~~~~~~~~~~~~~【 在 FlowerDrink
(花间一壶酒) 的大作中提到: 】
from this board.
avatar
h*y
11
真不错! 钻研精神也让人佩服!
avatar
r*e
12
哈哈,悲啐了!

【在 H********g 的大作中提到】
: 哼哼哈嘿
avatar
h*l
13
为什么要转成 int array?
直接 string比就完了阿
本来就不用extra memory

【在 l*****a 的大作中提到】
: string to integer array
: need extra memory...
: what will you know if there no extra memory?

avatar
F*k
14
It's okay no problem. Thanks :-)

FlowerDrink

【在 b*********r 的大作中提到】
: 理解你的心情,但我们也经常去那里下载模板,参考别的信息,所以是否可以理解为互
: 相借鉴,只要最终能够帮助大家申请拿到绿卡,其他的相对都是次要的了,不知道版务
: 这么说你是否觉得合理,还SUFFER的话PM我啊~~~~~~~~~~~~~~~~~~~【 在 FlowerDrink
: (花间一壶酒) 的大作中提到: 】
: from this board.

avatar
h*y
15
真不错! 钻研精神也让人佩服!
avatar
l*a
16
string比就是KMP吧?
似乎有序的条件用不上

【在 h**********l 的大作中提到】
: 为什么要转成 int array?
: 直接 string比就完了阿
: 本来就不用extra memory

avatar
t*n
17
怒赞啊!你的手指一定绿油油的绿得发亮!

box

【在 z**j 的大作中提到】
: 被区长表扬了我的莴笋苗长得好,让我忍不住要得瑟一下我自己DIY的grow light box
: ,(新人有了一点小成绩就特别爱得瑟,请大家忍耐哈)。经过大概10天的体验,我可
: 以很傲娇地说:这个简易版的grow light box真好用,我的莴笋小苗可以长得这么结实
: ,完全是它的功劳!
: 在网上查过,育苗期间,幼苗最好有光照12-16小时。我家东西朝向,能够晒苗的时间
: 很有限,于是就萌生了建一个Grow Light Station的念头。现成的Grow Light挺贵的,
: 第一年当农民,也不知会不会是黑手指,不敢投入太大,就在网上寻找DIY的可能性。
: 网上DIY的grow Light 版本很多,有的相对复杂。本着低成本,易操作的原则,我最后
: 参考了Youtube上的种菜达人Gary Pilarchik的办法,并在使用当中根据自己的体会,
: 进行了一些改良。(PS: 我挺喜欢看Gary的channel,很适合新手)

avatar
w*x
18

binary search啦, 其实乱七八糟的逻辑挺多的

【在 l*****a 的大作中提到】
: string比就是KMP吧?
: 似乎有序的条件用不上

avatar
y*2
19
赞mm聪惠心灵手巧:) 有想法而付出行动,大赞👍

box

【在 z**j 的大作中提到】
: 被区长表扬了我的莴笋苗长得好,让我忍不住要得瑟一下我自己DIY的grow light box
: ,(新人有了一点小成绩就特别爱得瑟,请大家忍耐哈)。经过大概10天的体验,我可
: 以很傲娇地说:这个简易版的grow light box真好用,我的莴笋小苗可以长得这么结实
: ,完全是它的功劳!
: 在网上查过,育苗期间,幼苗最好有光照12-16小时。我家东西朝向,能够晒苗的时间
: 很有限,于是就萌生了建一个Grow Light Station的念头。现成的Grow Light挺贵的,
: 第一年当农民,也不知会不会是黑手指,不敢投入太大,就在网上寻找DIY的可能性。
: 网上DIY的grow Light 版本很多,有的相对复杂。本着低成本,易操作的原则,我最后
: 参考了Youtube上的种菜达人Gary Pilarchik的办法,并在使用当中根据自己的体会,
: 进行了一些改良。(PS: 我挺喜欢看Gary的channel,很适合新手)

avatar
h*l
20
binary search 长的那个string
想象空格把长string 分成 一个array of strings
最坏还是 M*N, 平均 N*logM,
用 suffix tree可以 N+M最坏,N+logM平均

【在 l*****a 的大作中提到】
: string比就是KMP吧?
: 似乎有序的条件用不上

avatar
y*8
21
超赞!
有这样钻研劲头的新手在我看来就是高手
avatar
w*x
22

binary search想想好像得计算字符串长度, 也没什么意义

【在 h**********l 的大作中提到】
: binary search 长的那个string
: 想象空格把长string 分成 一个array of strings
: 最坏还是 M*N, 平均 N*logM,
: 用 suffix tree可以 N+M最坏,N+logM平均

avatar
T*m
23
真厉害!同意刚刚,要注意安全。
建议你去建个博客,把你的文章放在那里,供大家学习。
avatar
h*l
24
对于长的,log一下,速度还是可以的
match的话,那个linear,没法避免,用另外的datastructure,可以存下来后O(1)查

【在 w****x 的大作中提到】
:
: binary search想想好像得计算字符串长度, 也没什么意义

avatar
o*i
25
不错! 今年我也DIY了 grow light box. 我用的是 30w cold white, LED flood
light. flood light 是室外用的,带罩子,防水,还是比较安全。
avatar
w*x
26

我的意思是你一开始还得计算大字符串的长度, 要不咋二分

【在 h**********l 的大作中提到】
: 对于长的,log一下,速度还是可以的
: match的话,那个linear,没法避免,用另外的datastructure,可以存下来后O(1)查

avatar
b*h
27
你这简直就是科学家种地啊

box

【在 z**j 的大作中提到】
: 被区长表扬了我的莴笋苗长得好,让我忍不住要得瑟一下我自己DIY的grow light box
: ,(新人有了一点小成绩就特别爱得瑟,请大家忍耐哈)。经过大概10天的体验,我可
: 以很傲娇地说:这个简易版的grow light box真好用,我的莴笋小苗可以长得这么结实
: ,完全是它的功劳!
: 在网上查过,育苗期间,幼苗最好有光照12-16小时。我家东西朝向,能够晒苗的时间
: 很有限,于是就萌生了建一个Grow Light Station的念头。现成的Grow Light挺贵的,
: 第一年当农民,也不知会不会是黑手指,不敢投入太大,就在网上寻找DIY的可能性。
: 网上DIY的grow Light 版本很多,有的相对复杂。本着低成本,易操作的原则,我最后
: 参考了Youtube上的种菜达人Gary Pilarchik的办法,并在使用当中根据自己的体会,
: 进行了一些改良。(PS: 我挺喜欢看Gary的channel,很适合新手)

avatar
h*l
28
c++ size() 是 o(1),hoho

【在 w****x 的大作中提到】
:
: 我的意思是你一开始还得计算大字符串的长度, 要不咋二分

avatar
z*j
29
呵呵,谢谢大家支持。各位大牛见笑了,你们手指绿,不需要这些雕虫小技都可以让苗
长得很好。我只是笨鸟先飞,挖空心思找些辅助措施来增加成功率。
安全性是我一开始就很重视的,所以有smoke detector在这个房间里。
avatar
w*x
30

那得假设你知道长度的情况下才二分, string那种包起来的

【在 h**********l 的大作中提到】
: c++ size() 是 o(1),hoho
avatar
z*j
31
有机会想看看你的set up照片,我也在想怎么样可以把它改良的更好。

【在 o*****i 的大作中提到】
: 不错! 今年我也DIY了 grow light box. 我用的是 30w cold white, LED flood
: light. flood light 是室外用的,带罩子,防水,还是比较安全。

avatar
h*l
32
考点是 二分,别太挑剔吗
一些corner cases
不然, 你直接 return strstr()。。。。。。 一行
面试的人疯掉来的

【在 w****x 的大作中提到】
:
: 那得假设你知道长度的情况下才二分, string那种包起来的

avatar
l*a
33
不是挑剔
你需要给别人说明白你的算法
如果你明白了,面世官不明白
你觉得你能过吗?

【在 h**********l 的大作中提到】
: 考点是 二分,别太挑剔吗
: 一些corner cases
: 不然, 你直接 return strstr()。。。。。。 一行
: 面试的人疯掉来的

avatar
w*x
34
考点是2分也得假设知道字符串长度啊, 不知道数一遍每啥意义啊, 还得遍历一遍
avatar
j*e
35
M是数组string的长度吧?
用binary search,最坏也不是M*N,也是N*logM.每次分割,不会有unbalance
的情况。

不知道你suffix tree怎么弄到N+logM.

【在 h**********l 的大作中提到】
: binary search 长的那个string
: 想象空格把长string 分成 一个array of strings
: 最坏还是 M*N, 平均 N*logM,
: 用 suffix tree可以 N+M最坏,N+logM平均

avatar
h*l
36
行。。。。假设知道长度

【在 l*****a 的大作中提到】
: 不是挑剔
: 你需要给别人说明白你的算法
: 如果你明白了,面世官不明白
: 你觉得你能过吗?

avatar
h*l
37
最坏,大string就一个数,你当然要遍历一遍拉,你再想想

【在 j********e 的大作中提到】
: M是数组string的长度吧?
: 用binary search,最坏也不是M*N,也是N*logM.每次分割,不会有unbalance
: 的情况。
:
: 不知道你suffix tree怎么弄到N+logM.

avatar
t*h
38
数组上用二分得到logn是由于数组有random access,可以直接从start跳mid或者last
跳mid,你这个不转的前提上,怎么跳呢?一个一个判定再移过去,那么这个就不是
logN了。
而且,用空格当做分割时可以,但是两个空格之间的数字占的char个数不同,怎样再判
定了第一个数字之后,知道后面第3,第4个数字的下标是多少呢?
没想通怎样做到你描述的复杂度。详细解释细吧

【在 h**********l 的大作中提到】
: binary search 长的那个string
: 想象空格把长string 分成 一个array of strings
: 最坏还是 M*N, 平均 N*logM,
: 用 suffix tree可以 N+M最坏,N+logM平均

avatar
w*x
39

last
那这题也没啥考点啊, 2分也没啥效果, 这题没意思

【在 t**********h 的大作中提到】
: 数组上用二分得到logn是由于数组有random access,可以直接从start跳mid或者last
: 跳mid,你这个不转的前提上,怎么跳呢?一个一个判定再移过去,那么这个就不是
: logN了。
: 而且,用空格当做分割时可以,但是两个空格之间的数字占的char个数不同,怎样再判
: 定了第一个数字之后,知道后面第3,第4个数字的下标是多少呢?
: 没想通怎样做到你描述的复杂度。详细解释细吧

avatar
M*a
40
这题显然可以bs啊
把字符串切开两半之后,从切开点向两边找空格

last

【在 t**********h 的大作中提到】
: 数组上用二分得到logn是由于数组有random access,可以直接从start跳mid或者last
: 跳mid,你这个不转的前提上,怎么跳呢?一个一个判定再移过去,那么这个就不是
: logN了。
: 而且,用空格当做分割时可以,但是两个空格之间的数字占的char个数不同,怎样再判
: 定了第一个数字之后,知道后面第3,第4个数字的下标是多少呢?
: 没想通怎样做到你描述的复杂度。详细解释细吧

avatar
t*h
41
你怎么知道本次该在那一个下标位置切这一刀呢?这刀切完后,怎找空格?如果是一个
一个下标move过去的话,那么就不是logN了啊。
牛人,写个程序吧,教导下我们菜鸟

【在 M*****a 的大作中提到】
: 这题显然可以bs啊
: 把字符串切开两半之后,从切开点向两边找空格
:
: last

avatar
t*h
42
如果在每一次的查找中,不能skip掉一些下标的话,而必须一个一个下标来判定,那么
和直接线性查找比,有什么优势呢?

【在 t**********h 的大作中提到】
: 你怎么知道本次该在那一个下标位置切这一刀呢?这刀切完后,怎找空格?如果是一个
: 一个下标move过去的话,那么就不是logN了啊。
: 牛人,写个程序吧,教导下我们菜鸟

avatar
M*a
43
没说让你必须log N啊
只是说要快
你要是整个输入就一个int,没有空格,那怎么log n?

【在 t**********h 的大作中提到】
: 你怎么知道本次该在那一个下标位置切这一刀呢?这刀切完后,怎找空格?如果是一个
: 一个下标move过去的话,那么就不是logN了啊。
: 牛人,写个程序吧,教导下我们菜鸟

avatar
t*h
44
那线性搞,算法最简单,然后O(n),你这样二分搞,优势在哪里呢?时间复杂度更优?

【在 M*****a 的大作中提到】
: 没说让你必须log N啊
: 只是说要快
: 你要是整个输入就一个int,没有空格,那怎么log n?

avatar
M*a
45
时间复杂度最差O(n)

优?

【在 t**********h 的大作中提到】
: 那线性搞,算法最简单,然后O(n),你这样二分搞,优势在哪里呢?时间复杂度更优?
avatar
I*I
46
1. strstr肯定不行,不光要match string,还要match大小。
2. 也不用二分,
3. 有O(N)算法

【在 c**********r 的大作中提到】
: Given a string of sorted integers, e.g. "1 52 69 456789 994546566";
: and a a number e.g. 69.
: You need to tell if it is in the input, e.g. 69=>true.
: Write the code using the fastest algorithm.

avatar
t*h
47
那和线性搞比,没优势啊,逻辑还很复杂。。。

【在 M*****a 的大作中提到】
: 时间复杂度最差O(n)
:
: 优?

avatar
h*l
48
qsort最差还o(n)呢
你说qsort没优势?

【在 t**********h 的大作中提到】
: 那和线性搞比,没优势啊,逻辑还很复杂。。。
avatar
w*x
49
我怀疑是不是面试官脑袋短路了出了个昏题
avatar
t*h
50
问题是这题二分的最优的时间复杂度是多少呢?如果也是O(n),那么就没优势了,刚
才我的表述有问题,嗯

【在 h**********l 的大作中提到】
: qsort最差还o(n)呢
: 你说qsort没优势?

avatar
s*f
51
i think it is a good quiz for its messy code.

【在 w****x 的大作中提到】
: 我怀疑是不是面试官脑袋短路了出了个昏题
avatar
s*f
52
//回报本版,码遍本版
//Given a string of sorted integers, e.g. "1 52 69 456789 994546566";
//and a a number e.g. 69.
//You need to tell if it is in the input, e.g. 69=>true.
//strlen is O(n), don't use C style string for O(log n), suppose
//the string is friendly without lots of blank.
void GetWordPos(const char *mid, const char *left, const char *right, const
char **pstart, const char **pend){
while (isspace(*mid))
++mid;
*pstart = mid;
while (*pstart >= left && !isspace(**pstart))
--(*pstart);
if (isspace(**pstart))
++(*pstart);
*pend = mid;
while (*pend < right && !isspace(**pend))
++(*pend);
}
int StrCmp(const char *numstr, int numlen, const char *pstart, const char *
pend){
int len = pend - pstart;
if (numlen < len){
return -1;
} else if (numlen > len){
return 1;
} else {
while (*numstr && *numstr == *pstart){
++numstr;
++pstart;
}
if (!*numstr){
return 0;
} else if (*numstr < *pstart){
return -1;
} else {
return 1;
}
}
}
void IntToStr(int num, char *numstr, int *numlen){
//todo
return;
}
bool SearchString(const char *str, int num){
if (!str)
return false;
int len = strlen(str);
int left = 0;
int right = len;
char numstr[128];
int numlen = 0;
IntToStr(num, numstr, &numlen);
while (left < right){
int mid = left + (right - left) / 2;
const char *pstart, *pend;
GetWordPos(str + mid, str + left, str + right, &pstart, &pend);
int ret = StrCmp(numstr, numlen, pstart, pend);
if (ret == 0){
return true;
} else if (ret < 0){
right = pstart - 1 - str;
} else {
left = pend + 1 - str;
}
}
return false;
}
avatar
l*a
53
店面你能把这些搞出来?

const

【在 s*******f 的大作中提到】
: //回报本版,码遍本版
: //Given a string of sorted integers, e.g. "1 52 69 456789 994546566";
: //and a a number e.g. 69.
: //You need to tell if it is in the input, e.g. 69=>true.
: //strlen is O(n), don't use C style string for O(log n), suppose
: //the string is friendly without lots of blank.
: void GetWordPos(const char *mid, const char *left, const char *right, const
: char **pstart, const char **pend){
: while (isspace(*mid))
: ++mid;

avatar
Z*Z
54
用两个pointer扫描并且tokenize那个长string,如果token大小不match直接跳过,mat
ch了再逐位比较,成么
其实也不用match大小,就是tokenize+比较就是线性算法吧。

【在 I*I 的大作中提到】
: 1. strstr肯定不行,不光要match string,还要match大小。
: 2. 也不用二分,
: 3. 有O(N)算法

avatar
v*c
55
你看了n+1个字符还没看到空格,你不就知道他比那个数大了吗?
所以binary search的话O(n log m)是够了的
每次花O(n)时间寻找空格和比较大小(空格没找到说明比当前数字大)

【在 h**********l 的大作中提到】
: 最坏,大string就一个数,你当然要遍历一遍拉,你再想想
avatar
j*e
56
整个string就是一个大数,也不需要遍历一遍。
例如从中点开始,不是空格,往前走N个,往后走N个,就知道当前数肯定
比目标数大了,然后就跳去1/4位置。
你再想想?

最坏,大string就一个数,你当然要遍历一遍拉,你再想想

【在 h**********l 的大作中提到】
: 最坏,大string就一个数,你当然要遍历一遍拉,你再想想
avatar
s*f
57
i didn't take long time.
just coding. remember do help function later

【在 l*****a 的大作中提到】
: 店面你能把这些搞出来?
:
: const

avatar
t*i
58
如果string中的integer是以空格间隔的话,下面是我的想法,大牛给看看可不可行
1. 把目标integer 转换成string s
2. 求s在原string str 中的index
3.1 (java里)如果返回-1,return false
3.2 如果返回一个正数,如果str这个index之前和s.length之后的那个字符都是空格就
return true,否则return false.
因为是sorted的,所以只需要检测第一个substring即可。
这个,我不会算复杂度。。。
avatar
d*o
59
/*
curInt
curStr
flag=1
*/
Answer; time. O(n) space O(1)
bool findInput(string in, int target){
string s = intToString(target);
int i=0;
int flag=1;
int curInt=0;
while(i
if(in[i]!=' '&&flag==1){
curInt = curInt*10+(in[i]-'0');
} else if(in[i]!=' '&&flag==0){
curInt= in[i]-'0';
i++;
} else if(in[i]==' '&&flag==1){
if(curInt==target) return true;
else if(curInt>target) return false;
else {
curInt=0;
flag=0;
}
} else{
curInt=0;
flag=0;
}
i++;
}
if(i==in.size()){
if(curInt==target) return true;
else if(curInt>target) return false;
}
return false;
}
avatar
d*o
60
Time average O(lgn) worst O(n)
int findSubInt(string in,int mid,int& subBegin,int& subEnd){
subBegin=mid;
subEnd=mid;
while(in[subBegin]!=' '){
subBegin--;
}
if(in[subBegin]==' ') subBegin++;

while(in[subEnd]!=' '){
subEnd++;
}
if(in[subEnd]==' ') subEnd--;
string subStr = in.substr(subBegin,subEnd-subBegin+1);
return atoi(subStr.c_str());
}
bool findInt(string in, int target){
int begin =0;
int end = in.size();
while(begin<=end){
long long mid = (begin+end)/2;
while(mid>=0&&in[mid]==' '){
mid--;
}
if(mid<0){
begin=(begin+end)/2+1;
continue;
} else if(in[mid]!=' '){
int subBegin=0;
int subEnd=0;
int subInt = findSubInt(in,mid,subBegin,subEnd);
if(subInt>target){
end=subBegin-1;
continue;
} else if(subInt==target) return true;
else {
begin=subEnd+1;
continue;
}
}
}
return false;
}

【在 c**********r 的大作中提到】
: Given a string of sorted integers, e.g. "1 52 69 456789 994546566";
: and a a number e.g. 69.
: You need to tell if it is in the input, e.g. 69=>true.
: Write the code using the fastest algorithm.

avatar
n*r
61
C语言的话,就就假设字符串长度已知,C++和JAVA取字符串长度O(1)
既然已知长度,取中值,如果不是空格,则延中值向两边拓展,取到中间的数,
然后选取一侧继续。
可以这样二分吧!
avatar
j*x
62
直接binary search,pivot处的字符串(如果正好是空格,就左移或者右移一位)按照
数字直接比较就行,不需要考虑是整数还是字符串,反正最后总是能缩到一个点上。。。

【在 l*****a 的大作中提到】
: string比就是KMP吧?
: 似乎有序的条件用不上

avatar
e*e
63

。。
Agree. Here is my code in Java.
public boolean isFind(String s, int n) {

int mid = s.length() / 2;
char midChar = s.charAt( mid );
if ( midChar == ' ' )
return isFind( s.substring( 0, mid ), n ) || isFind( s.
substring( mid + 1, s.length() ), n );

int rightMostLetterIdx = findRightMostLetterIndex( s, mid );
int leftMostLetterIdx = findLeftMostLetterIndex( s, mid );

String midNum = s.substring( leftMostLetterIdx, rightMostLetterIdx +
1 );
int midNumInt = Integer.parseInt(midNum);
if ( midNumInt == n )
return true;

if ( midNumInt < n && rightMostLetterIdx < s.length() - 2 )
return isFind( s.substring(rightMostLetterIdx + 2, s.length() ),
n );

if ( midNumInt > n && leftMostLetterIdx > 1 )
return isFind( s.substring(0, leftMostLetterIdx -1 ), n );

return false;
}

public int findRightMostLetterIndex(String s, int rightMostLetterIdx) {
while ( s.charAt( rightMostLetterIdx ) != ' ' && rightMostLetterIdx
< s.length() - 1 )
rightMostLetterIdx++;
if ( rightMostLetterIdx < s.length() - 1 )
rightMostLetterIdx--;

return rightMostLetterIdx;
}

public int findLeftMostLetterIndex(String s, int leftMostLetterIdx) {
while ( s.charAt( leftMostLetterIdx ) != ' ' && leftMostLetterIdx >
0 )
leftMostLetterIdx--;
if ( leftMostLetterIdx > 0 )
leftMostLetterIdx++;

return leftMostLetterIdx;
}

【在 j********x 的大作中提到】
: 直接binary search,pivot处的字符串(如果正好是空格,就左移或者右移一位)按照
: 数字直接比较就行,不需要考虑是整数还是字符串,反正最后总是能缩到一个点上。。。

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