求思路

一个int 数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它。
能否只用一个额外数组和少量其它空间实现。

作者: suntot   发布时间: 2011-06-13

先排序

作者: yewuqing007   发布时间: 2011-06-13

好像是堆排序的内容,看看堆排序怎么做的

作者: xuexiaodong2009   发布时间: 2011-06-13

能说得具体点吗,谢谢

作者: suntot   发布时间: 2011-06-13

定义一个bool数组以标记该数是否有可能符合,初始化为false
然后第一次遍历int数组(从前往后),找出当前最大值,与该数比较,如果该数不小于当前最大值,将其bool数组职位true。这样进行第一次,保证bool中为true的数均不小于左边的数。
然后进行第二次遍历int数组(从后往前),找出当前最小值与该数比较,如果该数的bool为true并且该数大于当前最小值,将其bool数组职位false。这样又保证了所有为true的数均不大于右边的数。
最后遍历bool数组,输出为true的相应的int数组中的值。
代码就不写了

作者: wocaoqwer   发布时间: 2011-06-13

从左到右扫一遍,记住已扫过的数的最大值,这样就能找到满足“其左边的数都小于等于它”的数,在一个额外数组上标记下来。
同理,从右到左扫一遍,得到“右边的数都大于等于它”的数。

取两次的交集就行了。

作者: yq_118   发布时间: 2011-06-13