Re: [問題] 程式考試時的拿捏

看板C_and_CPP作者 (坐吃山空)時間9年前 (2015/07/14 11:59), 編輯推噓7(7013)
留言20則, 7人參與, 最新討論串3/3 (看更多)
※ 引述《EdisonX (卡卡獸)》之銘言: : 單純想討論算法。 : 1. sort (number ) , O(nlogn) : 2. i = 0 : n-1 : (2.1) if( number[i] ) > target ) goto end : (2.2) slack = target - number[i] ; : (2.3) search ( number + i + 1, number + n , i) : 這種算法整體應該也還是 O(nlogn) , 概要約如下。 <deleted> : 不知道有沒有更好的作法? 另若是改成 (3個數之合) , (4個數之合) 為target 的話 , : 我也死在牆上了 XD 假設已經排完序了,題目也保證一定有一組解,且只需要找出一組解. 那應該是夾起來就好 ? auto numbers = std::array<int, 4>{2, 7, 11, 15}; int target = 9; int l = 0; int r = numbers.size() - 1; int sum; do { sum = numbers[l] + numbers[r]; if (sum > target) { r--; } else if (sum < target) { l++; } } while (sum != target); std::cout <<"index1=" << l + 1 << ", index2=" << r + 1 << std::endl; -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.122.83.198 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1436846387.A.525.html

07/14 12:07, , 1F
大推(Y)
07/14 12:07, 1F

07/14 13:03, , 2F
推 ... 這方法確實較佳。
07/14 13:03, 2F

07/14 18:11, , 3F
有排序這個假設會不會太強了?
07/14 18:11, 3F

07/14 21:32, , 4F
@cobrasgo , 沒排序過的話做 struct 記 idx 應該不難 ,
07/14 21:32, 4F

07/14 21:32, , 5F
這篇所提的方法還是十分有效的。
07/14 21:32, 5F

07/14 21:45, , 6F
ㄜㄜ...怎麼到後來大家都覺得應該是有排序的~~@@
07/14 21:45, 6F

07/14 21:46, , 7F
其實原題目是沒有排序的
07/14 21:46, 7F

07/14 21:46, , 8F

07/14 21:47, , 9F
只不過剛好題目舉的例子看起來是有排序而已
07/14 21:47, 9F

07/14 21:55, , 10F
耶 ... 我的意思是 , 這題目就算沒排序過 , 也可以轉換成
07/14 21:55, 10F

07/14 21:56, , 11F
有排序過的 , 複雜度頂多變成 O(nlogn) , 還是有效的解法
07/14 21:56, 11F

07/14 22:13, , 12F
對阿. 我們只是在討論排序後的做法.
07/14 22:13, 12F

07/14 22:14, , 13F
另外一種就是 Hashtable
07/14 22:14, 13F

07/14 22:26, , 14F

07/15 01:15, , 15F
除非追求超過O(nlogn) 不然假設排序過還滿OK的吧?
07/15 01:15, 15F

07/16 14:03, , 16F
未排序的話那排序時間複雜度就是bottle neck了吧
07/16 14:03, 16F

07/16 15:15, , 17F
用空間換時間的話,這題有O(n)的解法
07/16 15:15, 17F

07/16 15:17, , 18F
啊我笨了,就是原po的寫法囧
07/16 15:17, 18F

07/18 09:31, , 19F
面試白板題能答成這樣 那挺強的。
07/18 09:31, 19F

07/18 12:09, , 20F
白板題...好熟的面試方式... @@
07/18 12:09, 20F
文章代碼(AID): #1Lf8apKb (C_and_CPP)
文章代碼(AID): #1Lf8apKb (C_and_CPP)