分析:
m個連續的整數加和是最大,那麼最簡單的實現方式就是:從下標爲0查找m個元素,依次n個數組成的容器進行遍歷,每次遍歷判斷當前最大的m個數之和,遍歷結束後返回。java
public class MaxArray { public static void main(String[] args) { // int[] 數組 asList返回 int[];形式List對象 Integer[] paras = { 133, 445, 6768, 23, 656, 123105, 768, 234, 787, 6321, 5677, 234, 1445, 3551, 547, 3245, 12357 }; //引用類型的數組轉化爲集合 List<Integer> lists = Arrays.asList(paras); int n = 6; //將集合轉化爲數組 System.out.println(getArray((Integer[])lists.toArray(),n)); System.out.println(getArray(paras, n)); } public static <T> String getArray(Integer[] params, int n) { // 聲明maxs,初始化temp Integer[] maxs = null, temp = null; if (!(params instanceof Integer[])) { return "參數類型錯誤"; } temp = new Integer[n]; maxs = new Integer[n]; int len = params.length; for (int i = 0; i < len; i++) { if (i + n <= len) { // 數組複製 至關於切片 System.arraycopy(params, i, temp, 0, n); if (maxs[0] == null || (maxs[0] != null && (getSum(maxs) < getSum(temp)))) { // 引用相同 不可以使用 maxs = temp; // 從temp複製一份給maxs System.arraycopy(temp, 0, maxs, 0, n); } } } // 將數組以字符打印 return Arrays.toString(maxs); } //取數組或者集合的加和 public static <T> int getSum(T t) { int sum = 0; if (t instanceof List<?>) { List<?> temp = (List<?>) t; int len = temp.size(); for (int i = 0; i < len; i++) { sum += (Integer)temp.get(i); } } else if (t instanceof Integer[]) { Integer[] temp = (Integer[]) t; for (int i = 0; i < temp.length; i++) { sum += temp[i]; } } return sum; } }
如代碼所示,Java底層數據結構多由數組實現的,而且在System庫中提供了數組複製的本地方法arraycopy,能夠輕鬆的將改變屬性的引用。使用Arrys.asList()方法和list.toArray()能夠輕鬆的實現數組到集合之間的相互切換。數組