要求:
查找数组arr(arr[i]>0,i>=0)中第k大的奇数,如果不存在则返回0,并计算出时间复杂度,不能使用库函数或者脚本中已经实现好的排序算法和工具,需要自己实现数据结构和所需要的算法;
格式:public int findKth(int[] arr,int k){
// 代码
}
代码:
public class Test {
public static void main(String[] args) {
int[] arr = {1, 5, 78, 4, 8, 10, 56, 89, 67};
int k = 2;
int number = findKth(arr, k);
System.out.println(number);
}
private static int findKth(int[] arr, int k) {
arr = sort(arr);
int size = 0;
for (int i = 0;i<arr.length;i++){
if (arr[i]%2==1){
size++;
if (size==k){
return arr[i];
}
}
}
return 0;
}
private static int[] sort(int[] arr) {
for (int i=0;i<arr.length-1;i++){
for (int j=0;j<arr.length-1;j++){
if (arr[j]>arr[j+1]){
int a = arr[j];
arr[j]=arr[j+1];
arr[j+1]=a;
}
}
}
return arr;
}
}
结果:
5
解释:
先使用冒泡排序进行排序,在使用for循环遍历查找第k大的数,由于冒泡排序的时间复杂度比较大,所以时间复杂度是O(n^2)