จากโจทย์ที่ http://www.codenone.com/node/371
ยังไม่มีใครตอบ T_T (สงสัยจะง่ายเกินไปสำหรับมือโปรฟอรัมนี้)
ลองคิดๆดูออกมาได้เยี่ยงนี้ สำหรับข้อแรก
class Array def max_sub better_sub = [] better_val = 0 n = self.length (0...n).each do |i| value = 0 (i...n).each do |j| value += self[j] if (value > better_val) then better_val = value better_sub = self[i..j] better_sub end end end better_sub end end arr = [[-1, 2, 5, -1, 3, -2, 1],[4,3,5,-1,-7,-10,2],[100,-100,-1000,99,10]] arr.each do |a| p a.max_sub end
พี่ป็อก ...optimized มันได้อีกมั้ยครับ?? T_T ผมมีปัญญาแค่นี้ รันที่O(n^2)
ถ้าเขียนโค้ดงามๆออกมาจะเป็น O(n) ได้ม่ะคับ :P
คุณ sugree ถ้าเขียน python จะออกมาเป็นไงครับ??
ส่วนข้อสองขอไปปล้ำซักพักก่อน...แหง่ะ (-3-) ใครคิดได้แชร์กันด้วยเน้อ.. ^^
กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น
ไม่ใช่ยากไปง่ายไปหรอกครับ ... ช่วงนี้งานมันรัดตัว รัดมาก เห็นโจทย์แล้วคุ้นๆ เหมือนเคยเห็นที่ไหนมาก่อน Deja Vu
โจทย์อย่างนี้ต้องปล่อยให้จิตใต้สำนึกทำงานก่อน
(แต่รู้สึกจะปล่อยให้มันทำนานไปหน่อย เลยยังไม่มี output)
O(n) ได้นะครับ แบบ greedy
แต่ขี้เกียจเขียนอะ
เขียน O(n) ด้วย ML ไว้ที่
http://www.codenone.com/node/407
นะครับ