最大子陣列問題(三種方式,java實現)

2021-07-30 07:31:18 字數 1240 閱讀 6175

1.動態規劃,時間複雜度為n

/**

* 動態規劃 : 時間複雜度n

* @param arr

* @return

*/public static integer maxsubarray(integer arr)

sum = sum + arr[i];

if(max_sum < sum)

} system.out.print(min_index + " " + max_index + " ");

return max_sum;

}

2.暴力求解,時間複雜度為n^2

/**

* 暴力求解 : 時間複雜度n^2

* @param arr

* @return

*/public static integer maxsubarray(integer arr)

}} system.out.print(min_index + " " + max_index + " ");

return max_sum;

}

3.遞迴,時間複雜度為n*logn

/**

* 遞迴演算法 : 將陣列一分為2,最大子陣列要麼在左邊部分;要麼在右邊部分;要麼穿過中點,最邊一部分+右邊一部分。 時間複雜度:n*logn

* @return 結果陣列:起點,終點,最大值

*/public static integer find_maximum_subarray(integer a, int low, int high) ;

} else else if(r_maximum_subarray[2] >= l_maximum_subarray[2] && r_maximum_subarray[2] >= crossing_subarray[2]) else

} }public static integer find_max_crossing_subarray(integer a, int low, int mid, int high)

} int right_sum = integer.min_value;

int max_right = 0;

sum = 0;

for (int j = mid + 1; j <= high; j++)

} return new integer;

}

最大子陣列問題的三種解法

最大子陣列問題 在乙個數列當中尋找乙個子數列,使得這個子數列的元素之和最大。為了使 簡單化,在這裡我們只求出最大值。暴力搜尋,即在c n,2 種可能的方法中尋找符合題意得一種,顯然時間複雜度為 n include include using namespace std int a 16 int ma...

演算法導論 最大子陣列問題的三種解法

演算法導論 最大子陣列問題的三種解法 標籤 空格分隔 演算法導論 首先補充兩個數學公式 a lo gbc clog baa c alogb c cl ogb alo g n nlog n log n theta nlogn log n nlog n 什麼是最大子陣列問題?給定一陣列a,尋找a中和最大...

最大子段和 三種方法

今天參加了一場洛谷網的比賽,深受打擊.寒假過了這麼多天,一直沒有認真學習演算法,以至於現在的水平比兩個月前還要低.本來就沒有多少底子,又退步了許多,感慨萬分.在洛谷上看到這麼一道題 最大子段和 如果資料小的話,用暴力列舉很簡單就可以做出來了,時間按複雜度位o n 3 可是一道演算法題怎麼會這麼簡單呢...