array max sum ข้อแรก

  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.
  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.

จากโจทย์ที่ 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-) ใครคิดได้แชร์กันด้วยเน้อ.. ^^

sugree's picture

ไม่ใช่ยากไปง่ายไปหรอกครับ ... ช่วงนี้งานมันรัดตัว รัดมาก เห็นโจทย์แล้วคุ้นๆ เหมือนเคยเห็นที่ไหนมาก่อน Deja Vu

โจทย์อย่างนี้ต้องปล่อยให้จิตใต้สำนึกทำงานก่อน
(แต่รู้สึกจะปล่อยให้มันทำนานไปหน่อย เลยยังไม่มี output)

O(n) ได้นะครับ แบบ greedy
แต่ขี้เกียจเขียนอะ

เขียน O(n) ด้วย ML ไว้ที่
http://www.codenone.com/node/407
นะครับ

ย้าย Codenone

ประกาศย้าย Codenone ไปใช้ Forum ของ Blognone แทนครับ ตามไปตั้งกระทู้ต่อได้ที่ Codenone Forum (รายละเอียดอ่านจากกระทู้ ย้าย Codenone ไปรวมกับ Blognone)

กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น