看板 PHP 關於我們 聯絡資訊
想請問各位大大 今天如果我有一維陣列的數值為2,2,3,3,4,4,5,5,6,7,8,9,10,11,12 要怎麼把它自訂排序變成2,3,4,5,2,3,4,5,6,7,8,9,10,11,12 ? 或者是2,3,4,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12 要怎麼把它變成2,3,4,5,6,7,8,9,10,11,12,6,7,8,9,10,11,12 ? 跪求各位大大解惑 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.86.131 ※ 文章網址: http://www.ptt.cc/bbs/PHP/M.1398250217.A.6EF.html
kerash:我是按照你的需求做,不是通用 04/23 20:56
onemaydayme:多謝大大指點,但是我跑了你的程式,發現第一個case 04/23 22:03
onemaydayme:會變成2~12印兩次,我的意思是只有重複兩次的數值 04/23 22:04
onemaydayme:需要排,也就是總長度其實是不變的 04/23 22:04
bibo9901:一樓看得懂規則喔 翻譯一下 04/23 23:10
mmis1000:找差一的塞,不然就找最小的 04/23 23:22
mmis1000:http://ideone.com/AHivq4 04/23 23:43
kerash:咦.. 我測試時正確,我再看看 不過這個條件很奇怪就是.. 04/24 00:03
mmis1000:上面貼的是假設沒有負數的狀況,所以省略了一些判斷 04/24 00:18
chenlarry:樓主給的兩個數列排序之後的結果好像邏輯不一樣 04/24 00:19
chenlarry:推文給的都是最小跑到最大不重複然後再重新來過 04/24 00:19
chenlarry:可是樓主第一個數列好像又不是這麼一回事,題目有錯嗎? 04/24 00:20
chenlarry:希望樓主把題目講清楚..不然根本沒人知道規則是什麼... 04/24 00:22
mmis1000:懂了,是後方優先 04/24 00:22
mmis1000:可是那只是第一個的條件,這兩個條件根本不一樣 04/24 00:33
chenlarry:摟主要解釋 1.重複的數列是要排在前面還是後面? 04/24 00:33
chenlarry:2.數列一開始就會是排序好得嗎?還是有可能會打亂? 04/24 00:33
chenlarry:根據樓主的回答會直接改變這隻程式的複雜度 04/24 00:34
mmis1000:是自動從有切齊的那頭開始跑?(1的min跟2的max) 04/24 00:36
mmis1000:樓主要的是被排序的連續數列,可是這些數列的排序是? 04/24 00:41
mmis1000:以 頭/尾為基準 遞增/遞減排序 ? 04/24 00:42
kerash:修正 應該兩個都對了 ... 少加了一個判斷 04/24 01:32
kerash:http://pastebin.com/0XAHzAMf 換一個空間貼比較好看 04/24 01:37
kerash:我的假設是,假如第一個遇到就重複,就先把重複貼完(直到 04/24 01:39
kerash:不重複),貼完後再從頭開始 foreach 一次,這是第一條 04/24 01:39
kerash:第二個規則是,假設初始不重複,則一直跑,直到遇到重複 04/24 01:40
kerash:接著將重複的數字記錄,同時先將數列跑完一次,等結束後 04/24 01:40
kerash:再將重複的那些數字loop跑完,這樣來讓兩個條件同時達成 04/24 01:41
kerash:但是這條件限制很大,就是中間假設不連續就會錯誤 04/24 01:41
mmis1000:http://ideone.com/QEjDQk 頭尾各sort一次 04/24 01:43
mmis1000:@kerash,用 http://ideone.com/ 貼還可以看編譯結果 04/24 01:46
kerash:再貼下去我好像會貼太多了 :[ 04/24 01:52
chenlarry:因為樓主沒說清楚,我就以他給的例子所看到的部份來假設 04/24 01:56
chenlarry:1.只會重複1次 2.只會重複開頭或結尾其中一種 04/24 01:58
chenlarry:http://ideone.com/QtIFOC 所以我的思考方式就是直接把 04/24 02:02
chenlarry:重複的地方拿出來,再來決定要黏在哪 04/24 02:03
chenlarry:我的解法也可以處理中間重複的情況 04/24 02:05
MOONRAKER:開一個陣列,內容是2,3,4,...,12 04/24 08:33
MOONRAKER:新陣列進來排序就照「模板陣列」的內容挑出來排 04/24 08:33
MOONRAKER:超簡單的,有沒有規則都合適,愛怎麼排就怎麼排,壓比 04/24 08:34
onemaydayme:對不起我沒說清楚規則,簡單來說就是 04/24 12:43
onemaydayme:有兩對的一定是連號的數字 04/24 12:44
onemaydayme:抓到有兩對的那組數字,就在那段區間輸出兩次數字排 04/24 12:45
onemaydayme:序就是了 04/24 12:45
onemaydayme:而且這個數列一定是遞增排序好的 04/24 12:47
onemaydayme:如果有三對重複的就會貼三次這樣 04/24 12:56
onemaydayme:跑完k大的程式如果有三組重複的數字好像只會輸出兩次? 04/24 12:58
onemaydayme:跑完m大的我發現可以ㄟ 04/24 13:08
onemaydayme:感謝各位大大解惑QQ 04/24 13:16
kerash:因為你的條件太少,我只針對重複數只有一次的狀況去跑 04/24 20:36
onemaydayme:sorry k大 我條件應該下清楚些! 04/24 22:07