一开始并没有想起来先用排序做,直接用的HashMap,解法比较通俗易懂
思路是遍历整个数组,当前值继承上一个连续的数+1,如果没找到上一个连续的值就设置为1
然后对下一个连续的值进行处理,如果之前保存的map中有下一个连续的值,则遍历每一个连续的值并且+1
最后输出map中最大的一个值
import java.util.*; public class Solution { /** * max increasing subsequence * @param arr int整型一维数组 the array * @return int整型 */ public int MLS (int[] arr) { Map<Integer,Integer> map = new HashMap(); int max = 0; for(int i = 0; i<arr.length; i++){ int count = map.getOrDefault(arr[i]-1,0)+1; map.put(arr[i],count); int upper = arr[i]+1; while(map.containsKey(upper)){ map.put(upper,++count); upper++; } } for(int i:map.keySet()){ max = Math.max(max,map.get(i)); } return max; } }