• 找出数组中所有组合中最大的值


    面试中,经常有算法题:

    比如找出一个数组中的所有组合,并找出最大的值。

    代码如下:

     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 }
  • 相关阅读:
    一年三百六十日,需求业务严相逼
    新博客测试
    教务流水账
    暗流涌动的话“用户体验”
    文档那些事儿
    jforum(2)中文乱码的解决方式
    jmeter笔记(4)测试上传附件
    jmeter笔记(2)组件介绍
    jmeter笔记(5)参数化CSV Data Set Config
    jmeter笔记(6)参数化函数助手
  • 原文地址:https://www.cnblogs.com/feiyujun/p/10085849.html
Copyright © 2020-2023  润新知