首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

随意给一组数,找出满足一上条件的a[i],a[i]左边的数小于等于a[i],a[i]右边的数大于等于a[i]

2012-10-19 
随意给一组数,找出满足一下条件的a[i],a[i]左边的数小于等于a[i],a[i]右边的数大于等于a[i]使用一个额外数

随意给一组数,找出满足一下条件的a[i],a[i]左边的数小于等于a[i],a[i]右边的数大于等于a[i]

使用一个额外数组记录每个数后面的最小值是多少,一个额外数组记录一个数前面的最大值是多少,当然,为了减少空间复杂度,可以使用一个数字记录一个数字前面最大值是多少。算法如下:

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;}


 

热点排行