使用一个额外数组记录每个数后面的最小值是多少,一个额外数组记录一个数前面的最大值是多少,当然,为了减少空间复杂度,可以使用一个数字记录一个数字前面最大值是多少。算法如下:
public List<Integer> findMidNum(int []num) { List<Integer>result=new ArrayList(); int[]min=new int[num.length]; min[num.length-1]=num[num.length-1]; for(int i=num.length-2;i>=0;i--) { min[i]=(min[i+1]>num[i])?num[i]:min[i+1]; } if(num[0]<=min[0]) { result.add(num[0]); } int max=num[0]; for(int i=1;i<=num.length-2;i++) { max=(max>num[i])?max:num[i]; if(num[i]>=max && num[i]<=min[i]) { result.add(num[i]); } } if(num[num.length-1]>=max) { result.add(num[num.length-1]); } return result; }