美文网首页
第k个元素

第k个元素

作者: 掌灬纹 | 来源:发表于2019-02-02 10:00 被阅读0次

尽量高效率的在一个乱序的数组中找到第k个大小的元素

如k=1,则为找到数组中最小的元素

思路:

1.可以先将数组排序,找第几个元素则为对应下标减一,快排时间复杂度O(nlgn)

2.分治法思维:将数组元素分区,左边都比主元小,右边都比主元大;主元一定在顺序数组的位置上,在判断k与主元下标的大小,大:右侧递归查找;小:左侧递归查找;相等,则返回主元(递归出口)复杂度O(n)

(分区思路代码示例)

public static void main(String[] args) {

int[] a = {3,9,7,6,1,2};

    int k = selectK(a, 0, a.length - 1, 2);

    System.out.println(k);

}

/**

*

* @param arr

* @param p 起点

* @param r 终点

* @param k 第k个元素

* @return

*/

public static int selectK(int[] arr, int p, int r, int k) {

int q = partition(arr, p, r);

int qk = q-p+1;//主元是第qk个元素

if(qk == k) return arr[q];

else if(qk > k) return selectK(arr, p, q-1, k);//目标在主元左侧

else return selectK(arr, q + 1, r, k - qk);//注意:主元在目标右侧,转为求第 k - qk个

}

static int partition(int[] arr, int p, int r) {

int pivot = arr[p];//假设第一个元素为主元

int sp = p + 1;

int bigger = arr.length - 1;

while(sp <= bigger) {

if(arr[sp] <= pivot) {

sp++;

}else {

swap(arr, sp, bigger);

bigger--;

}

}

swap(arr, p, bigger);

return bigger;//返回主元位置

}

static void swap(int[] arr, int i, int j) {

int temp = arr[i];

arr[i] = arr[j];

arr[j] = temp;

}

}

相关文章

  • 数据流中的第K大元素

    数据流中的第K大元素 设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。

  • Leetcode 703 数据流中的第K大元素

    数据流中的第K大元素 题目 设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个...

  • LeetCode 数据流中的第 K 大元素

    设计一个找到数据流中第 k 大元素的类(class)。注意是排序后的第 k 大元素,不是第 k 个不同的元素。 请...

  • Leetcode-703:数据流中的第K大元素

    题目描述: 设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。 你...

  • 703. 数据流中的第K大元素

    题目描述 设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。 你的...

  • 寻找数据流中的第K大元素

    设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。 你的KthLa...

  • 数据流中的第 K 大元素

    设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。你的 KthLa...

  • 703. 数据流中的第K大元素

    设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。 你的 KthL...

  • 【LeetCode】数据流中的第K大元素

    设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。你的 KthLa...

  • 数据流中的第K大元素

    题目需求 设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。你的 ...

网友评论

      本文标题:第k个元素

      本文链接:https://www.haomeiwen.com/subject/lpfssqtx.html