MaxValueVO.java:


import lombok.Getter;
import lombok.Setter;

import java.io.Serializable;


@Getter
@Setter
public class MaxValueVO implements Serializable {

    private Integer max;
    private Integer secondMax;

}

Test.java:


import com.alibaba.fastjson.JSONObject;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.UUID;


public class Test {


    public static void main(String[] args) {
        Random random = new Random();
        List<Integer> nums = new ArrayList<>();
        for (int i = 0; i < 20; i++) {
            nums.add( random.nextInt( 100 ) );
        }
        querySecondMax( nums );
    }

    private static void querySecondMax(List<Integer> nums) {
        MaxValueVO[] dp = new MaxValueVO[ nums.size() ];
        int size = nums.size();
        // dp[i][0] 存储的是最大的
        // dp[i][1] 存储的第二大的
        // 1 2 3

        for (int i = 0; i < size; i++) {
            int num = nums.get( i );
            MaxValueVO vo = new MaxValueVO();
            if( i==0 ){
                vo.setMax( num );
                vo.setSecondMax( num );
            }else {
                MaxValueVO vo_prev = dp[ i-1 ];
                if( num > vo_prev.getMax() ){
                    vo.setMax( num );
                    vo.setSecondMax( vo_prev.getMax() );
                }else {
                    vo.setMax( vo_prev.getMax() );
                    if( num > vo_prev.getSecondMax() ){
                        vo.setSecondMax( num );
                    }else {
                        vo.setSecondMax( vo_prev.getSecondMax() );
                    }
                }
            }
            dp[i] = vo;
        }
        System.out.println(JSONObject.toJSONString( nums ));
        MaxValueVO maxValue = dp[nums.size() - 1];
        System.out.println( "最大值:" + maxValue.getMax() );
        System.out.println( "第二大值:" + maxValue.getSecondMax() );
    }
}

输出示例:

[49,15,65,1,91,41,45,95,40,5,49,85,21,28,64,73,0,75,33,58]
最大值:95
第二大值:91
11-22 09:34