一个数组 比如
int[] a = new int[4,5,6,7,1,2,3,4,5]。
我如何能高效率的用程序算出 a[x] 在这个数组中排第几大比如a[0]= 4 第4大
a[2]=6 第2大
麻烦各位大侠给点意见
int[] a = new int[4,5,6,7,1,2,3,4,5]。
我如何能高效率的用程序算出 a[x] 在这个数组中排第几大比如a[0]= 4 第4大
a[2]=6 第2大
麻烦各位大侠给点意见
最后就知道在数组中有几个比a[x]大,a[x]就是第i大.
for (int i = 0; i < a.length; i++) {
if (a[i] > x) {
pos++;
}
}
return pos + 1;
如果这个数组一直要用,就先排序,后二分查找,排序偷懒直接用工具类了。 int[] a = new int[] {1, 2, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 5, 6, 7, 1, 2, 3, 4, 5 };
int x = 6; // 要找的数
int[] b = new int[a.length]; // 如果a不能变,用b,否则直接操作a就可以了
System.arraycopy(a, 0, b, 0, a.length);
Arrays.sort(b); // 以上为一次性的排序,以下为查找部分
int pos = Arrays.binarySearch(b, x);
System.out.println(pos);
for (; b[pos + 1] == x; pos++) {
// 如果数组可能重复的话
}
pos = b.length - pos;
System.out.println(pos);上面是a不重复,如果重复的话