求思路
一个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数组中的值。
代码就不写了
然后第一次遍历int数组(从前往后),找出当前最大值,与该数比较,如果该数不小于当前最大值,将其bool数组职位true。这样进行第一次,保证bool中为true的数均不小于左边的数。
然后进行第二次遍历int数组(从后往前),找出当前最小值与该数比较,如果该数的bool为true并且该数大于当前最小值,将其bool数组职位false。这样又保证了所有为true的数均不大于右边的数。
最后遍历bool数组,输出为true的相应的int数组中的值。
代码就不写了
作者: wocaoqwer 发布时间: 2011-06-13
从左到右扫一遍,记住已扫过的数的最大值,这样就能找到满足“其左边的数都小于等于它”的数,在一个额外数组上标记下来。
同理,从右到左扫一遍,得到“右边的数都大于等于它”的数。
取两次的交集就行了。
同理,从右到左扫一遍,得到“右边的数都大于等于它”的数。
取两次的交集就行了。
作者: yq_118 发布时间: 2011-06-13