1. 程式人生 > >找出數組中所有組合中最大的值

找出數組中所有組合中最大的值

rgs 公式 company get color 代碼 pan 數組長度 emp

面試中,經常有算法題:

比如找出一個數組中的所有組合,並找出最大的值。

代碼如下:

 1 package com.company.algorithm;
 2 
 3 /**
 4  * 選擇數組中和的值最大的一組,例如:[2,-7,5,-9],組大的一組是:2,-7,5值為0
 5  */
 6 public class SelectValueMaxGroup {
 7     public static void main(String[] args) {
 8         int[] list = {6, -1, 2, -9, 4, -5, 7, -8, 3, -10, 15};
 9         int
max = getMax(list); 10 System.out.println(max); 11 } 12 13 /** 14 * 獲取值最大的那組的值 15 * 算法: 16 * 1. 如何找到所以的分組?設數組長度為n,則組的個數=n-1 + n - 2 + ...1 即: (n - 1) * (n - 1 + 1) / 2 ; 17 * 例如數組長度為10,則根據公式:(10 - 1) * ( 10 - 1 + 1) / 2 = 45中組合 18 * 2. 依次從第一個元素開始找與它所有的組合,直到找到最後一個組合
19 * 3. 計算每個組合的值,找到最大的 20 * @param list 數組 21 * @return 組合最大的值 22 */ 23 private static int getMax(int[] list) { 24 int max = 0; 25 int temp; 26 //從第一個元素開始組合,逐次到數組最大長度 27 for (int i = 0; i < list.length - 2; i++) { 28 //控制組合,由索引m遞增控制 29 for
(int m = i + 1; m <= list.length - 1; m++) { 30 temp = getValue(list, i, m); 31 if (temp != max && temp > max) { 32 max = temp; 33 } 34 } 35 } 36 return max; 37 } 38 39 /** 40 * 獲取數組從索引開始大結束的值,及組合的值 41 * @param list 數組 42 * @param start 開始索引 43 * @param end 結束索引 44 * @return 組合的值 45 */ 46 private static int getValue(int[] list, int start, int end) { 47 int temp = 0; 48 for (int i = start; i <= end; i++) { 49 temp += list[i]; 50 } 51 52 return temp; 53 } 54 }

找出數組中所有組合中最大的值