[請益] 演算法請教

看板PHP作者 (我會更好)時間11年前 (2014/02/07 03:41), 編輯推噓4(4014)
留言18則, 9人參與, 最新討論串1/1
假設有串數列 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

02/07 06:26, , 1F
"算出全部有幾個不同的數字".可順便取要的結果.不用掃第2次
02/07 06:26, 1F

02/07 11:49, , 2F
具體來說,求每個數字第一次出現位置的最大值就是了
02/07 11:49, 2F

02/07 14:56, , 3F
array_search 找出 9 的位置,然後做 array_splice 就出來了
02/07 14:56, 3F

02/07 14:57, , 4F
如果只有少量數據這樣處理就很夠用了,還是我誤會什麼了?
02/07 14:57, 4F

02/07 14:59, , 5F
array_splice => array_slice
02/07 14:59, 5F

02/07 16:50, , 6F
樓上你好像誤會很大... (還是我誤會你了? XD)
02/07 16:50, 6F

02/07 17:57, , 7F
因為樓主交代很模糊呀XD 我就說我是不是誤會什麼了?
02/07 17:57, 7F

02/07 22:34, , 8F
應該是去重複之後的最後一個出現的數字?
02/07 22:34, 8F

02/08 00:30, , 9F
to alog 他要找的就是取到哪可以涵蓋所有出現過的字元
02/08 00:30, 9F

02/08 00:31, , 10F
你的做法是沒啥問題啦 但問題是根本連要找誰都還不知道
02/08 00:31, 10F

02/08 00:32, , 11F
反正最佳解應該就上面推的 找出所有字元最大的位置
02/08 00:32, 11F

02/08 00:32, , 12F
這樣只要掃描一次就夠了(次數記錄跟事後的比對先丟一旁)
02/08 00:32, 12F

02/08 09:58, , 13F
用一個初始數值為0的陣列當INDEX,掃到的數字就把對應的
02/08 09:58, 13F

02/08 09:59, , 14F
改為1,整個數列掃一輪,答案就出來了
02/08 09:59, 14F

02/08 21:08, , 15F
能夠先排序再檢查嗎,檢查前一個跟現在抓的一不一樣
02/08 21:08, 15F

02/08 21:10, , 16F
不然用新陣列 key 取舊陣列的 value,如果isset就跳過
02/08 21:10, 16F

02/08 21:12, , 17F
不然的話看一下 array_unique 的做法
02/08 21:12, 17F

02/08 21:51, , 18F
我會讓他value=key 去跑出另個array最後取key
02/08 21:51, 18F
文章代碼(AID): #1Iy-Lhsa (PHP)
文章代碼(AID): #1Iy-Lhsa (PHP)