作者maxmilian (我会更好)
看板PHP
标题[请益] 演算法请教
时间Fri Feb 7 03:41:27 2014
假设有串数列 1 4 6 2 3 8 8 2 9 4 2
如何快速的取出前面的某一段,即可包含全部的数字
1 4 6 2 3 8 8 2 9 4 2
^^^^^^^^^^^^^^^^^
以上面的例子需要取到9这个数字,
才能包含全部的数字
==
先讲一下我的直觉做法
我是先算出全部有几个不同的数字,
以上例来说是共有7个 ( 1 4 6 2 3 8 9 )
再从头开始扫,扫到不同的第七个时,
就可以取到9这个数字
有前辈可以有更好的解法吗??
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 42.71.40.209
1F:→ xxxzzz:"算出全部有几个不同的数字".可顺便取要的结果.不用扫第2次 02/07 06:26
2F:推 LPH66:具体来说,求每个数字第一次出现位置的最大值就是了 02/07 11:49
3F:→ alog:array_search 找出 9 的位置,然後做 array_splice 就出来了 02/07 14:56
4F:→ alog:如果只有少量数据这样处理就很够用了,还是我误会什麽了? 02/07 14:57
5F:→ alog:array_splice => array_slice 02/07 14:59
6F:→ PsMonkey:楼上你好像误会很大... (还是我误会你了? XD) 02/07 16:50
7F:推 alog:因为楼主交代很模糊呀XD 我就说我是不是误会什麽了? 02/07 17:57
8F:推 thitbbeb:应该是去重复之後的最後一个出现的数字? 02/07 22:34
9F:→ danny8376:to alog 他要找的就是取到哪可以涵盖所有出现过的字元 02/08 00:30
10F:→ danny8376:你的做法是没啥问题啦 但问题是根本连要找谁都还不知道 02/08 00:31
11F:→ danny8376:反正最佳解应该就上面推的 找出所有字元最大的位置 02/08 00:32
12F:→ danny8376:这样只要扫描一次就够了(次数记录跟事後的比对先丢一旁) 02/08 00:32
13F:→ chenlarry:用一个初始数值为0的阵列当INDEX,扫到的数字就把对应的 02/08 09:58
14F:→ chenlarry:改为1,整个数列扫一轮,答案就出来了 02/08 09:59
15F:→ sextitanic:能够先排序再检查吗,检查前一个跟现在抓的一不一样 02/08 21:08
16F:→ sextitanic:不然用新阵列 key 取旧阵列的 value,如果isset就跳过 02/08 21:10
17F:→ sextitanic:不然的话看一下 array_unique 的做法 02/08 21:12
18F:推 sunnyvisit:我会让他value=key 去跑出另个array最後取key 02/08 21:51