最长递增子序列

来源:互联网 发布:淘宝二手市场网 编辑:程序博客网 时间:2024/05/21 09:13

问题描述

给定一个数组{5,6,7,1,2,8},求他的最长递增子序列

算法思想

用数组length[i]表示第i个位置到数组末位置的最长子序列的长度。默认初始值为1。for循环双重比较,用变量currentMaxIndex表示当前元素的值,将当前元素的值和后面的每一个元素进行比较,如果小于length[i]+=1,并且将大的值赋值给currentMaxIndex,并将其加入临时变量list集合中。最内层循环结束以后,如果maxLength小于length[i],将length[i]的值赋值给maxLength,并更新sequence。

代码

    public static Map<String,Object> get(int [] numbers) {        int[] length=new int[numbers.length];        for(int i=0;i<length.length;i++){            length[i]=1;        }        List<Integer> sequence=new ArrayList<>();        List<Integer> list=new ArrayList<>();        int maxLength=0;        for(int i=0;i<numbers.length;i++){            int currentMaxIndex=numbers[i];            list.clear();            list.add(numbers[i]);            for(int j=i+1;j<numbers.length;j++){                if(currentMaxIndex<numbers[j]){                    currentMaxIndex=numbers[j];                    length[i]+=1;                    list.add(numbers[j]);                }            }            if(maxLength<length[i]){                maxLength=length[i];                sequence.clear();                sequence.addAll(list);            }        }        Map<String ,Object> map=new HashMap<String,Object>();        map.put("sequence", sequence);        map.put("maxLength", maxLength);        return map;    }

结果展示

这里写图片描述

原创粉丝点击