[问题] 如何在数列中找到max min且max在min右边

楼主: joe1234wu   2015-08-17 23:24:32
想请教大家....
最近遇到一个问题
情境会变成
有个数列
ex: [15, 46, 60, 23, 15, 19, 1, 22, 45, 38]
我要如何找到 Max and min 使得 Max-min 最大
但是 Max 必须在min 的右边
以上面的例子为例
就是 Max = 60 min = 15( 因为 60-15 = 45会是最大)
我有想过 O(n^2)的方式 就是每次index 当最小值 然后往右找最大
最后在看哪个最小
但是有没有更好或是更快的方法?
感谢
作者: ckc1ark (伪物)   2015-08-17 23:33:00
扫一遍记录目前看过的最小值 再和目前的值相减找最大?你的目标应该是找ai和aj (j>i)然后maximize(aj-ai)吧 和max min有关系吗
楼主: joe1234wu   2015-08-17 23:37:00
对 楼上的叙述比较对 但是无法照你第一楼说的方法做
作者: ckc1ark (伪物)   2015-08-17 23:40:00
我指的是每看一个值就当aj, ai当然不意外是已经看过的(a1~j-1)最小值
楼主: joe1234wu   2015-08-17 23:56:00
你这个方法跟我一开始想的一样 只是在想有没有办法更快扫完一次 O(n) 就找完
作者: ckc1ark (伪物)   2015-08-18 00:02:00
最小值更新每次O(1)*看完每个值是O(n)没错啊 我有误会什么吗
作者: Thisisnotptt (这不是PTT)   2015-08-18 00:37:00
楼上的做法感觉应该没错,差的n-Order应该是差再一个是直接记录下最大值,每往前走便比较一次是否大于最大值,若非则不处理,若是则更新最大值,所以整个只走过一次,并不用每走一步就再用一个循环去找一次最大值
楼主: joe1234wu   2015-08-18 00:51:00
感谢详细解释 那0~j-1但最小值该如何更新呢?

Links booklink

Contact Us: admin [ a t ] ucptt.com