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 可是一道演算法題怎麼會這麼簡單呢...