{1,22,56,53,34,51,77}这是一个数组,如何不用内部函数和遍历数组的方法判断出 53 在这个数组里。(面试问题)

2015-07-10 22:02:34 +08:00
 ning1022

我想到了php中的in_array()函数。但是很明显不对。

11529 次点击
所在节点    PHP
119 条回复
adspe
2015-07-10 22:07:09 +08:00
用查找算法?
qiayue
2015-07-10 22:09:49 +08:00
用 implode 合并成逗号分隔的字符串,然后判断字符串?
任何 php 内部函数都不能用吗还是说仅仅不能用同功能的函数?
simman
2015-07-10 22:13:31 +08:00
public static function inArray($item, $array) {
$flipArray = array_flip($array);
return isset($flipArray[$item]);
}

这个???
xlmo
2015-07-10 22:18:13 +08:00
不用内部函数?那貌似只能一个一个去if($arr[0] == 53) 了。。
whahuzhihao
2015-07-10 22:20:04 +08:00
array_flip也是内部函数啊
iyaozhen
2015-07-10 22:26:49 +08:00
应该就是考查找算法吧。
dallaslu
2015-07-10 22:39:37 +08:00
针对这个数组进行任何处理,都有可能进行遍历的吧!

如果不需要遍历,不如生成一个 0 到数组长度 -1 随机数,来随机读取数组内元素,每次保证不重复读取相同位置上就行了。这样有七分之一的概率不需要遍历数组。
br00k
2015-07-10 22:44:59 +08:00
不遍历怎么知道??感觉这种问题怎么有点弱智啊。。。
est
2015-07-10 22:45:19 +08:00
赌10元钱任何实现都用到了某种程度上的遍历。
choury
2015-07-10 22:46:04 +08:00
不管用什么方法到最后都是要遍历的,至少得知道里面有那些元素吧
除非能找到一个公式可以生成这个序列,不然不可能的
lincanbin
2015-07-10 22:51:38 +08:00
不让遍历的意思就是不让你逐个看这里面的东西吧。
PHP内部函数1500个都不让用,又不让看。
这是什么鬼?
mouhong
2015-07-10 22:51:42 +08:00
@dallaslu 随机数生成,重复读取判断,这貌似增加复杂度了吧。数组本身无序,已经存在不需要遍历的可能性了吧。要是可接受近似解,貌似有个什么亚线性算法可以用,具体不知了
loveuqian
2015-07-10 22:52:20 +08:00
@xlmo 那也是遍历啊
mouhong
2015-07-10 22:53:02 +08:00
@mouhong 不过这种题感觉就是考个遍历,传说中的 FuzzBuzz 测试
solupro
2015-07-10 22:55:06 +08:00

我们可以用in呀
http://nikic.github.io/2012/07/27/How-to-add-new-syntactic-features-to-PHP.html

---
好吧,上面开玩笑的,也是遍历,求正确姿势
hobbyliu
2015-07-10 22:56:33 +08:00
@dallaslu 此方法,不错,忘记叫什么算法了,概率性很大。
r00tt
2015-07-10 22:59:31 +08:00
@hobbyliu 是蒙特卡洛么,有点这个的感觉
hobbyliu
2015-07-10 23:02:39 +08:00
@leepood 不是,我记得当初的一个场景时,一个猴子为了排序3个大小不同的干果,不断的往天上抛,直到,排序正确位置,适用于少量元素排序,概率性很大。
sumhat
2015-07-10 23:03:20 +08:00
$array = {1,22,56,53,34,51,77};

if (TRUE || array) {
echo '我灵光一闪,断定 53 必然在这个数组里。';
}
101
2015-07-10 23:04:48 +08:00
查找算法也是要遍历的呀

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/204852

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX