作者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