找到一个元素“k”,使得在未排序数组中存在比该元素更大的元素“k”

时间:2013-09-08 05:48:11

标签: arrays

Accolite采访:

输入:整数数组(未给出范围),未排序,大小为n

输出:在数组中找到一个元素“k”,这样数组中的确切“k”元素大于此元素。

例如,如果数组是:

1。 [4,3,6,9,10,22] 这里的输出是4

2。 [4,3,6,9,10] 输出:没有找到这样的号码

这个问题可以通过在O(n log n)时间内排序很容易地完成,但我被要求在O(n)时间内完成(如果O(logn)可能)。

2 个答案:

答案 0 :(得分:0)

有人帮忙,这是解决方案

注意事项:“K”不能大于数组的大小。     我们将有一个大小等于给定数组的count数组。

assuming indexes start from 1 
for(i=1;i<=n;i++)
{
  if(a[i]<=n)
    count[a[i]-1]++;
  else
    count[n]++;
}



boolean flag=false;
 for(i=n-1;i>=1;i--)
 {
    if(count[i]==i)
    {
      flag=true;
      System.out.println("k: "+i);

    }
 }

 if(flag==false)
      System.out.println("No such number found);

}

答案 1 :(得分:0)

int[] count = new int[ n + 2 ];
for ( int k = 0; k < n; ++k )
    ++count[ Math.min( n + 1, Math.max( 0, a[ k ] + 1 ) ) ];
int k = n, c = count[ n + 1 ];
for ( ; k > 0 && ( 0 == count[ k ] || k != c ); c += count[ k-- ] );
System.out.println( 0 == k ? "not found" : "found: " + k );