面试题:求第K大元素(topK)?

在原来基础上增加了算法E

一、引言

​ 这就是类似求Top(K)问题,什么意思呢?怎么在无序数组中找到第几(K)大元素?我们这里不考虑海量数据,能装入内存。

二、普通算法

算法A:

将数组中的元素升序排序,找到数组下标k-1的元素即可。这是大家最容易想到的方法,如果使用简单排序算法,时间复杂度为O(n^2)。

算法B:

  1. 第一步:初始化长度为K的一个数组,先读入K个元素,将元素降序排序(升序也可以),这时候第K大元素就在最后一个。
  2. 第二步:读入下一个元素就与已排序的第K大元素比较,如果大于,则将当前的第K大元素删掉,并将此元素放到前K-1个正确的位置上(这里就是简单的插入排序了。不了解插入排序的朋友可以看这里图解选择排序与插入排序)。
  3. 时间复杂度:第一步采用普通排序算法时间复杂度是O(k^2);第二步:(N-k)*(k-1) = Nk-k^2+k。所以算法B的时间复杂度为O(NK)当k=N/2(向下取整)时,时间复杂度还是O(n^2)。

其实求第K大问题,也可以求反,即求第N-k+1小问题。这是等价的。所以当K=N/2时,是最难的地方,但也很有趣,这时候的K对应的值就是中位数。

三、较好算法

算法C:

  1. 算法思想:将数据读入一个数组,对数组进行buildHeap(我们这里构建大顶堆),之后对堆进行K次deleteMax操作,第K次的结果就是我们需要的值。(因为是大顶堆,所以数据从大到小排了序,堆排序以后会详细说)。

  2. 现在我们来解决上节遗留的问题,为什么buildHeap是线性的?不熟悉堆的可以看一下 图解优先队列(堆)。我们先来看看代码实现。

    public PriorityQueue(T[] items) {
           //当前堆中的元素个数
           currentSize = items.length;
           //可自行实现声明
           array = (T[]) new Comparable[currentSize +1];
           int i = 1;
           for (T item : items){
               array[i++] = item;
           }
           buildHeap();
       }

    private void buildHeap() {
           for (int i = currentSize / 2; i > 0; i--){
               //堆的下滤方法,可参考上面的链接
               percolateDown(i);
           }
       }

图中初始化的是一颗无序树,经过7次percolateDown后,得到一个大顶堆。从图中可以看到,共有9条虚线,每一条对应于2次比较,总共18次比较。为了确定buildHeap的时间界,我们需要统计虚线的条数,这可以通过计算堆中所有节点的高度和得到,它是虚线的最大条数。该和是O(N)。

面试题:求第K大元素(topK)?
面试题:求第K大元素(topK)?
面试题:求第K大元素(topK)?
面试题:求第K大元素(topK)?

定理:包含2h+1-1个节点、高为h的理想二叉树(满二叉树)的节点的高度的和是2h+1-1-(h+1)。

  1. 什么叫满二叉树?满二叉树是完全填满的二叉树,最后一层都是填满的,如图中所示。完全二叉树,是除最后一层以外都是填满的,最后一层外也必须从左到右依次填入,就是上一篇中说的堆的结构。满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树。

  2. 证明定理:

    容易看出,满二叉树中,高度为h上,有1个节点;高度h-1上2个节点,高度h-2上有2^2个节点及一般在高度h-i上的2i个节点组成。
    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA8MAAABbCAYAAABXqFeFAAAgAElEQVR4Xu2dC/xX8/3H32FKiA2rNqaWy1Ykq5XNpZaZ22yU0STdllsMwwq5pFp3lbUSGo1WFFmiXIqwMSRWLoUpq5nM3SpC/8fz8/fJ6dv3cs73nPP9/r7f3+vzePT48fud8znnPM/n8zmf973Oxo0bN5qaCIiACIiACIiACIiACIiACIiACNQiAnUkDNeit61HFQEREAEREAEREAEREAEREAERcAQkDGsgiIAIiIAIiIAIiIAIiIAIiIAI1DoCEoZr3SvXA4uACIiACIiACIiACIiACIiACEgY1hgQAREQAREQAREQAREQAREQARGodQQkDNe6V64HFgEREAEREAEREAEREAEREAERkDCsMSACIiACIiACIiACIiACIiACIlDrCEgYTuCVf/bZZzZt2jSbP3++dezY0Tp16mSzZ8+2xx57zD766CPr0KGDde3a1bbddtsErqYuREAEREAEREAEREAEREAEREAE4hKQMByXoJktXbrUVq9ebQ0bNrT+/ftb69atrVevXtasWTN77bXX7JJLLrFLL73UWrZsmcDV1IUIiIAIiIAIiIAIiIAIiIAIiEBcAhKG4xI0s1mzZlmbNm1s1apVNnDgQLv66qutbdu2rueVK1faxRdf7IThVq1aJXA1dSECIiACIiACIiACIiACIiACIhCXgIThmAQ3btxo69ats3r16tnUqVPt2WefdQLxDjvs4Hp+/PHHbfTo0TZy5Ehr2rRpzKvpdBEQAREQAREQAREQAREQAREQgSQISBhOgqKZrV271gYPHmy77767nXXWWVanTh1DUL7hhhtsxYoVNmDAAKtfv35CV1M3IiACIiACIiACIiACIiACIiACcQhIGI5DL3DuG2+8Yf369XOxwiTMor333nvOPZqkWp07d7b169c7CzKCspoIiIAIiIAIiIAIiIAIiIAIiED5CEgYToj9okWLXKzwqFGjbO+993a94jLN74YPH+6swo888oh16dJFwnBCzNWNCIiACIiACIiACIiACIiACBRLQMJwseQyzps5c6Y99NBDNnToUGvQoIH763333eeSaw0bNszuv/9+a9GihfunJgIiIAIiIAIiIAIiIAIiIAIiUF4CEoYT4E+d4UmTJjnrb7du3Wzrrbd2vb799ts2YsQIe//99+3kk0927tNykU4AuLoQAREQAREQAREQAREQAREQgZgEJAzHBKjTRUAEREAEREAEREAEREAEREAEKo+AhOHKe2e6YxEQAREQAREQAREQAREQAREQgZgEJAzHBKjTRUAEREAEREAEREAEREAEREAEKo+AhOHKe2e6YxEQAREQAREQAREQAREQAREQgZgEJAzHBKjTRUAEREAEREAEREAEREAEREAEKo+AhOHKe2e6YxEQAREQAREQAREQAREQAREQgZgEJAzHBKjTRUAEREAEREAEREAEREAEREAEKo+AhOHKe2e6YxEQAREQAREQAREQAREQAREQgZgEJAzHBKjTRUAEREAEREAEREAEREAEREAEKo+AhOHKe2e18o5fe+01u+KKK6xPnz522GGH1UoGemgREAEREAEREAEREAERqAkEPvnkE7vxxhvtkUcesTfeeMOuueYaa926dU24tUj3IGE4Ei4dXC4CDz/8sI0cOdKGDBlirVq1Ktdt6LoiIAIiIAIiIAIiIAIiIAJfELj77rvtz3/+s40YMcL22GOPsnD5/PPP7dNPP7Vtt9028vUlDEdGphPKQWDjxo322Wef2TbbbFOOy+uaIiACIiACIiACIiACIiACAQIbNmywsWPH2rvvvmsDBgyw+vXrl5zPO++8Y9OnT7emTZva0UcfHfn6EoYjI9MJIiACIiACIiACIiACIiACIlC7Cbz33nt26aWXOq9NQhnr1KlTMiCzZ8+2Bx980HbaaSd76qmn7Nxzz7Vjjz028vUlDEdGphNEQAREQAREQAREQAREQAREoHYTePnll+2iiy6y/v372w9+8IOywFi5cqVdfPHF1r1799IJw7irvvrqq/bvf//bmcO//vWvOx/xrbfe2rmyAqZZs2b2la98pSxQdNHqIfDSSy/ZTTfdZGvWrLELLrjAWrZsWT0PpycRAREQAREQAREQAREQgQolQE6fCRMmWI8ePezxxx+3N99807baais7//zz7Tvf+U5JnqqkwjDByU8++aT9/ve/t7333ttl9X3//fftr3/9q3388cdOWCGj2Ntvv22//vWvJQyXZAhU70WIAcAF4sQTT7TJkye7ydW3b1/3M2wj1njBggW2ePFiO+ecc6xevXpZT/3Xv/5lv/3tb52CxzcSdrVt2zbspariuPXr19v48ePtoIMOsoMPPrik7i5pAyTr4ahRo+y+++7bdCnGVtQxlfZ91pT+NXfivwnG2ooVK9wmoW7duvE7rLIeUJ7PmDHDmJtdu3Z1CvVs7R//+IfbWHE8bZdddnEJFVG61+ZWzet1Uu+VOMZx48bZ8ccfnzf5psZYduKe30knnWTNmzdP6rWonyohwD5h4sSJdtttt1m3bt3stNNOc7Ifv8N9GotxMQmtouIpmTDMR+iWW26x+fPnO1M4k8L7hSMkz5071wnJfNQQio877rioz6LjRWAzAgsXLnRxAE2aNHHxCB07dnSCcdjGJGVcPvDAAy6onw1Uofb888+78dugQQO32SIYv1oaPO6//34n7J5yyinWpUuXrMIuyqzBgwfbUUcdZT/5yU+qSiDmXX744YeuTNczzzzjFmqtVVuOcM2dZGY9380pU6bYf//7XxfLtN122yXTcRX04tn85z//cWtuGDbsP66++mrbd999bfjw4fbVr361CkjEe4RqX6/j0PFsjjjiCJdUJ0wso8bYlsQpbTl06FA744wzKrJsTpwxpHPzE/joo4/syiuvdHtmDEp+HZ80aZLz6MR1OZcRKkm2JROG0XBjBmcTma2GFEDYQD/77LOuzpQ0SEm+5sruCwUJHgNojpYvX2477LCDHXjggXbCCSe4n7ksvevWrXMapaefftoJpmx+olgCGIucx0TdZ599QkHE3YPj27RpYwMHDnT3Wi0NL45+/frZiy++aD/96U+dpSVXKANKAZ7fJ0WoFgY8B7Xw4MBCXU1rVbHzLNu71dzJPuJhjCfU/vvvb7vuumuoafHBBx84AW6//fZzmvNc1s9QndXAgxYtWmTXXnute8Y999wz9B2yp7jjjjvcvoFQqzANhTw1LQutX2H6qknH4JE0depU4/vDXurb3/62/ehHP3LP+bWvfa3grVbTes13nzItf/nLX2zVqlXu+RFk2S/stttuBVn4A7Cajxkzxn3Dzz777NDzrhrHGAYr5iljDAs4iij2RDBlnIVRRD300EP2xz/+0c3XKPM89AvTgWUjgBfmrFmzbM6cOcZ/N27c2A455BDr1KmTfeMb38h7X96rEkVJhw4d3LHMPfbeCMh4ZJbim1cSYRitNptiBBE0uLlM3mgCmHDS2JZtTNe4C/Nhw2OADxLuE7gKLlu2zP2OeODOnTu77HO5FmMW7euuu86wHjAGwyzaQPAbUOIVevbsGWoyBt09WARKNYlL9dJgOW3aNEPLC/NGjRrlvDTHEqvNO0IBxqJWLY016je/+Y3ttddeNmzYsEgbrJrKIO48Cz6X5s6Wbxm+bCJvvfVWFw/Fhz7KhpAx97vf/c4JjC1atKipwyjyfWF5Q2nG+hyFyerVq916jutl2MyfvAP2FmzKsbJH8RKK/GAlPIGxwd6J7w1jA88VBEE8ClC44NVUKFdGtazX3pJLVloENb47KAdQmhAyxZjJZozJ9roYJ9dff71b48PO1WocY94Dg31X7969nbcbYY1/+tOfnIECJR1jDAEoX/MCDnmCmH+lcH0t4TSstZcijIdvE2EqCMDMAbwyMX7S2CvhlZnLq4IYYeYYIWiEz9JY37ESs8/0AnImYIwSHBembb/99k55k0+oLokw7K1luFYi/edqaPPYPOezOIV5cB1THQQQLinC/cILL9gll1yymZX1n//8p3O3Z2N5+umnO7fdbJPNW/FOPvlkpx1mEQ8jEN9zzz2bCoB/85vfDAXUu3tgiWaDl2sSh+qsCg4iSR4uLliz2JhUSyuX5h+r4ltvveU0rWHc9cLyTmKeBa+lufP/NPzmj7INKPN23313931r2LBhJMGPvthgsOGgRVHqhR0D/ji8P7AClcJ9mE02uRywNkVh4gU3b80Mq2irRo8ONoMIInwDg1lYg2wJE2LsFPqOlWq9xjiC22PSXlM8MxtwLMGZ+wG/xj3xxBPu21zIWo51Cw8vcn6ceuqpodfbahxjf//7350S6Ze//KX97Gc/25S7wJfDYR7y+zACLn1dfvnlNmjQIGvXrl3U5SnU8axfeEognJfCohjqpsp8UFrruld8s/ZgAPL7EubbvffeayNGjHDznJ+5lLjsp5iXuNH7tZxQA5R5jDvvQZXphViRwjBaS4SaQtYyjmPDEFbTW+bxpcunTMB7FPBhyxQsvcX39ttvd1pbJk02zSSKmBtuuMFNRjanaDePOeaYvHfOBOdDiNARRTHjNUsI3EEtV8qYamz3CG+4mWH1YQMSdtNaYx8oQ8AptXWJ8YWFA5e9JGNokphn/p1p7nw5etkQrF271r0rNmW4jp933nmRBL/gXGCDgPWUtQVrTBoNRQatFN9gLAKsC6wTbHjCWoa91YCcBCjawjb4Y6XAslUtHh24Jj722GNZQ3K8cIu19Fe/+lVBVqVar9nnIQhhvU2yeXdLQliy9e3LtzDmCl3bz7WoYTDVOMYIK0BgoQWV/EFlX749WPAd++8DXmX5vETjjAsEP8IuSMJLzhg1s7TWdZQbKKBYTzP3335fwZ47V1iK96RA+eo9Kf244rvJ/nvevHkubDZKiGMx7zx1yzBamj/84Q82c+ZMpyFAyPj+97+fVdPGxgHpXyWVinmV1XeOz87IRpJERZnJmIgZ89YSPlrZ3J9YxNkUcD4LAm4chTTkTHAs0bj3RrHuVnO8cLGjCya4dqL1S0sTXOy9FXNeOTX/aQnDScwzz1JzJ/eoiisM+7HHPDrzzDNTsXqktWnKpEK8PWs3Ai1xhLSwwjACIAJVVEGlXB4dxawzYc4JZrdnT8U3K5jkEcGD3y1dutTFdSIkFvKKKsV6nZYw7OcX3+3DDz98C4R+s1soj4X3wmA/GjXvR7WNMSAy38aOHevWm+B3PCgMRwkZghF9ppXNXcLwlqtHWuu6V5TgfcJc4advwfUpV8JCPN3w8MRQ6hWwft3i28C3DgszBrG03epTF4YB4xcIDwnf7fbt2zu3nm9961sSfsN8+WrhMcFSBYceeqhzDyTexDcsC0wkGvEF2awZxDOw6JJki/iDQrFTWHOwJOPaGHZzxvX9ebj84ZL985//3HlDsLng4/q9733PXZ9FodIamj0ySOPiSVZNQh3Calz9AvPjH//YPX+S7r3l4Og1/3z8UeyRDMknasGrhbh2njUN96y0hWG8LYqdZ8E5oLmTfWTGFYb95hOhGEFy5513TnwKpLVpCt4omyRyPpCPAdc51u6wwnCxDIIb9wsvvNBd27vncW2UpKxr+fIgJA47ZoeZpd7wfgoqHBHmSFbEGvXd737XeU8VWrdLsV6nJQyTy4KwHL71KL8zjS5Y0FGgFBLCimVQjWOMIco4w6qOMIJ1zicspWQSChbvbRfW0uu/oczDNDxQJAyXXhjmilhxg+Fw7CfYN9555505vaEId0TBgtKOpH9+H0HVEmLS+T6cddZZJQnbKYkwHHTXyXxNTDA2kCTCUB3FmF/HKjvdJ/WhtFE2yzDeBmyqaLksw1GR+LhfzouiFQ5uPPgIo4Fnc4UVGu0XfdF3mNitqPec5vF8uBDw2WTghoabYRiXO39PXsuHy0sUnmk+U5y+/Zgj0QOeLig+iCvzcYwkFCEmCktM0i0tYTipeaa5k/+NxxWG6R1NPGMwqlU07FgshTCMRw9Jn9g8+9IZYYVhbx0nG3eUEBZvgXjllVfshz/8ocs+jYs17tls9C+77DKnmK+0ZH9wROBFSMm0DAefOaxluBTrdVrCsLfoUnkCZSRxrCS/RAHAOIMT7tHdu3fPq6z0Hl5R835U6xjLtXZgjGDesNfJFxOaeb53Z8dAEGUOh13DJAyXThjG2IRRwO+Xg5bh4J64JpeyI1He9OnTXUjT66+/7vZ17NsJk2S/Gza8r85GTGIFGof87W9/c7FOJCbI1ligCi1Sha6jv9ceAsEPHxMNITNsqZJ8lPxCzWYrSrFvfx6JG4488sjN6l4GNcbjxo0rGK9UU94ijIn5Jesq3hy+fiL/37dv35wlrYL3760XS5YscR/MPfbYo6Y8XuT7CFpisAKzuQrWkUaQ4BkLJQqMfOEvTkhLGM53P1HmmeZO+sKwDw3BS4Z1JumWtjDMGB49erRbH5k7XhsfVhj23kLMMZRyYVvQyyhzr+FLxrE3ieINFPba5TrOhyygqMu02uS6p1Ks12kJwzwT1mESilFSicamFhfMBQsWbBKECxldUDjh1YVrcCFPsiDH2jLGGE8kzcLTAAGCfRIKprBeX17hArtg0qSk5omE4S1Jpr2uZ3t3QSMoxs60QnuSGjdx+wklDPuLkFiIBQPBGO1bUDAm1qWQ+0q+m/3f//7nMtShrYrTcN3GskMq7tre0KaibUabHqfxMUJ42mabbeJ0s9m5aMTRSrJZJ1FCMJNdnIv4DxoWv3yZzzOv4V22sRgimAfrXlaqMEwW77lz57oskTQEY+I3csVk5eLO5ocYoTjWrBkzZjiXmzgNt1LWmLA1ozOv5TX/bLiGDBmyWfZWjq1GYTjKPNPcyT86k7AM+z6ieGdEmTNpbpq8co3cDl6QjyoMe2VArrCYXM/qPTpwh86sTFCNwnDwm5Ptm5RvTCSxXhfqP40EWv6arM98a1iPfDv44IOd0FYoi7RXBvg66WFLKnGdah9jwRh0nveAAw5wTPGoiNL82MQjI1fi0yj9ZR4rYXhLemmu69nelfeUIxQF2Y4EW8Xuu+KMhVKeG0kYDt4YibUQtlh40drRorqlZD4oWqoNGzbEen6SdwXjUqN2hotOXOEx6jWDx3P/BJ5HKS6f63pY9FEyMLDjNDSxSWa/JVaFpEzPPPOMizlBWCuUGCTs/fsaslEzBfu4eIRoYhyCWlIvRFH/sZIsD2QhZQOLFdRr+bC+R7XCezZxrOLMa+Z3nMY7wQXGxzxF7QvlAG4zfPwza6EH42OibtTD3kepLcNR55nmTv43mYQw7McgsVlRlHVhx1hamya+JSjWXnzxxc1KsEQVhim/iIcZm6tgKaF8z8fagZVvzpw5bvN+3HHHbXa4zzKMFTGtWOyw/JM6DqWBjxHGUhq2ti7XT2K9zvccaVqGWYeJN8S6SwgepRf9/gVBGI+KNm3a5LRi+uy2eLlEyTheG8ZYcD/46aefuhrDKLmjhjl6Vk899VQq+yEJw+UXhvnWYaxCuZQtxDGpda4m9ZNXGEYDRMsnCPkyCbi1pOX6VUpg06ZNs+uuu26zS5Ksg7jCsG4kmUoDPtbUdKN5v/Z8zxTWJaqUXJK6li8ATw2ypAVh7tFb96IINMHYiGwKHZ8w4qCDDnIuXMUoW1AeEZMZIiohK+q4gqDXehfj7uKZxlV2JTWGiu3HM8hWJsDXXGQ9S6usVimF4WLmmeZO+sKwFx7JS5BGvF1awjDWOsqdsDEKZvOPKgz7Mo1RFGteGcnczOad4sdtodKP+d4u8wXFcbHrMzGueKMVs0fIvC/vKsx3KaogHPwGprVepyUM+zULhQl7SRQAy5cvdx5NJH+koQzFqydXaSXvJcCxYRKOefalGGPsp/GuLLYlbZRAcUBYEMaszNCwQveYpveBhOHyCsMYUVg7UHzWFkEY4jmFYZ9dFzeTfLFNfvEhEDuOG2WhyVeqvwcXCH/NpN0EYIuVkUxsZEgkljPock5igmqp6xp8b3zscJe9/vrr7Re/+IX16tUr8aRrxWzofVIX7/4TdK0KZpmOam0OPju1erFuYK0rplHHjc1zMdlSfW1AFrdiapwWw7SYZ0zznKDmP5uiJAmFR01wBYdhsfOsmPdc7XMnOCaTsAx74ZGcBiS1i+JxU65QIr6JrBtkWc+05pZCGPbWdLKVZlp+g+7EUazNmWsNQhcCOhazYhrfDMJ9ENbiNBLAIOyhOMUyQ33OqK2YeeyvUc7QKhLhEINKluLgnpPxhyKT7LRYqhiHueZOscJwKcYYWXmx+BfbYILCJ8nmPTXoM0r4VDFKLX/fZEcnlDGOxyLKJ8IqcZ+v9FaudT0bN/aneD8+99xzLhwFvkko+CrhHeUUhn1mUTI25itw7hcfLF9R3S9rKqDMJA7cJ/EVZF0L1gFM6v5ZFHBRpF4jAktmPbikrlPOfrybHQIhyVMYV2mUrylmI+DdQ3G/ysyY7AuP89PHxJNkCytAoTIX5eQdvLZPxHLggQe658MlHUUM7sKFkpHQTzVYhn0ZCTabmUo75h/eILfffvumRDWsf1iLsYKF/RgUcgXHe4bNRz4lUFwPgDjzTHMn/4xNUhgu1jJcKJSIslg0BIZcLWookX/usOtZvgR0xWyi/YY9m0dHZvgH32fmODkfkgq9CfvccY/zFhn2VJk1P6P0HWe9DhNahVcXVtv99tsv521FtWJ6pQZGgWyGAO4Lt1z+xjvOFatarDBczWOM7xIKhWwhRsG5nW1+5XrBcSzDhbwwUN5jMDn99NNzZgLmO8keLI09ZJS5ltSx5VjXM+/d54RgnhXjkZIUi3L1k1MY9hpfskbmi+3BfYVaZcQdxEmCVJO0I7wMtJRonoLaq7QzZqP1RANKvIx3W4lTqLqcWt7MAY3ASZxwjx49XMmE4CJGnHbjxo2NRCFxWzFxjz7GqmvXrlvU0vWJtQ477DDnusV9Uw6K95NvMxD3OZI6P5ugh7vhhAkTnHY9TK3TJGLQym01zaf59y5yXitKmRO8NVB6nHrqqaGF4ULvrBRu0nHmmeZO+sJwJcYM51PyLF261K2L5LhAUCE/QT5hO2rMcCGPjszwD/YRuNWSoCzozl1obpb7734jytrMRpTvoW8oYp9++mlX7i2M8jKJ9TofjzTcpL0QSz3lc845J6uQ4/M6YFnMlbujmJjhah5jXsGCpY88BWeffbaLxfYtKAzns7gHx4Nihku/WqQV/uKfxIcosO/J9EhBUEceOvTQQ0OXKSo9ofhXzCkM+1ptlGFhAmXTwPgFnM0kLha4csZphbQjYfqOqvXO1Wcw5s4fA4O0apD6a6ABJYHE5MmTncsQG/NiWxgtb5i+o2p5M/vE0s74QFmSKQgzhijVwd+KcQnLvFbUjLjBcjvZYqy8JcMnbsGdzlsQ47rEhWEf95jMTKtYg3HXIglVsMB6oc1P3GzShaymYZ4zjtXUZ7HNpv32GwJfy5O5jwcD8dVJZlBMWxiOO880d9IXhis5m3Q2OlGt5VGzSfsMuFiAMz06gi7Svk49yksEx1x7ljDrTKmP8XsNlFGZgjD3wu+J6wwbYx7Hahfm2dMQhr0nIlbffCURuTY8MhMg+vsuJpt0NY+xoLCLoiEzjtrPR/hlMwZkGw/KJh1mliR7TJrCsPcmI18SrtGZ+3D2FXitYvSshD1vseSzCsPBOEkenkX48MMP3yyLK4kAAPTEE0/Ecukp9sZLcV5Qq+avl60+adL3wscR7S7Cd5KWqaTvM0x/xBRSz5XYg6OPPnqLTMBki5w4caIRxxnUhofpO9sxURPUFMoU7bXsbLaosYtGmo9GvtCBYu89jfN8nVk4E1NHpvS77rrL+vfvH0rL5zcXeICkUUYhjWfO7LNQpmhvrUNRg0WJ2DTKiCXtyp+mMJzEPNPcSV8Y9pvPtJIbpblpSkIYjqoMyJcp2luoCANhXSZUi7hfYk6jlNQpxRqU6xqsTbNnz7Z58+a5+27YsOEWh2L9xprHelSolWK9TkMYZs956623ujCSXFZfBGYMBNS37tmzZ04X2ajKgGoeY8FasZmWYc8cT8QoeXG88oB8B5lhZYXGZ5i/p5lAiz0942vZsmV23nnnWYcOHXLeEnmQiN/H2wRraYsWLbIeyxymrvXUqVNdpvvevXtHygURhkla6zpjAE8L9uBU2thrr722uB1K6eIBFFYZF+Z5auIxWYVhLLQMAmIogUMWSRJLINBgKSEZEGUWiKPFPbpQ7bea+OBh74ni5AhqLMS+Zat1GLa/sMcRO4O7F4WuK8ndK/h82ZQJ2Z4/W6xuWE6Zx0VdqBnLWPtZ6DJdiOibhZmFAms9GywWhJYtWybmOlvsc0Y5D0EW6zsfxvbt27tEL2G9ODxP4qOLzaQd5V7TOJZNM+8QVzEUM5lKFz5mfGzYRNEIhzj++OM3cydL4r7SEoaTmmeaO7nfMmOEcI6rrrrKhRYQ8kGYRNSYNTae3lU4ibCQzDtOa9OUjQzC56OPPuq8fojPZc9AXoJ8pc8oecP3lCSRYTZXbFpxw8ZDrUuXLlusuyiBWNuIc6NP1jaEpUpo3iJDcrJCyYTCKk9KsV6nIQzzvvw6huDPGCHu2zeEfAQO1nC+Q/lyt0RVOFXzGPNeB3j9INAFS3b63DjMIazxGCvC5Mfwc5jqGrlc2uPMvzSF4Shu4T72nmfJlwfBe9+R7wdlVhrlN9Na1/GyYP0OyjfZ3h1GgjDKuDjvvdznZhWGAUO8HIIwHzY+eliWiGfBIkzgOpkdGzRoUO77T/36uT5YaccPp/5gJbhA2MQrURI3FLrtMHFFhfrQ378k4K2FxBP16dMn1MdS/LITSEsYTmqeae5s+d58mES+MR22jJt3L2TzmVY93LQ2TcHnD7onZ+OSb+Poy9iRnC4tBpWy/hTi6J8DRUPYSh2lWK/TEoZ5XuKjycmBNYo8Hb8VoCoAAAuJSURBVBgCsMwtXLjQKayp6LDrrrvmfcXe0kvpRn2zzO3ZCe3CDRaPNvb17PGJA2VsoZQioV8YQRjwvvICngwwTrqlKQyTF4QQKJQDhSzDJOJDsEVJU8gyfMcddzhP2UqzDIf5vvF+wyrjkh4Lpewvb53hUt5ITb6Wj40OpsXHfRzrAFkV1WoWAZ/0qjZM4LTJkzuAcc5mrFJcw9NmUmz/aQnDxd5PtvM0d5KkuXlfvgwVnkVpbdJLIQzHJeSTRIYV8OJerzadX4r1Ok1hmHeFAQIBBGGEvRcCG7kusAaHEdi8wgUhMA033kodT7CkigTeA3i0YHkn9CuqdwuhY/nc2ePySVMYjntv5Tq/Etb1crFJ6roShkOSJDMz7lpoHX1r0qSJ025XqhtzyEevuMN8OSTcEMO44lXcA5bohnFNw1UfV/JqrHtdIoybLlMJwrDmTnqjgkydWBqKqfUd9q4qYdPk4xiJYax217uw7y2J40q1XqctDCfBgoSP3KcULknQ/LIPBGlKjDZq1MioNBOn2kmuO5MwvCWZSljXkx1ppe9NwnAE5tn8630JpEqraRjhsSvuUDTLZEzm34gRI6SsKPIN+k1r3759XQI9tXgE+MgvWbLElaqLqo2Pd+XwZ2vuhGcV5UifyA6PorQ2kdwP2e5pSWZBj/KcYY7FHZ/SblippGQLQyzcMaVar4nPJpFoEgkvwz1Z9KO88YIcGZWehDT606d3Bsnq8BQjmWZapSUJH+A67dq1SzwRVXpk0u25Etb1dAmk37uE4QiMfZbnm266abOziBk75phjQrnwRLicDo1BgNgQFm3ijPJlnoxxiao+lbHOOCf5FgkWakN+gKp+oREeTnMnAqyQh6JIxYvIr0khT6vaw/CSwNOK+OI04g6rFlyOB9N6vSUYwtpuvvlmV0WhUrKL1+Rx62Pc69ev72K307AK1+Tn171VNwEJwxHfLxp+rI3U/fMNbT+ZNBVTGRFmyoezAcVNCreemmwpSRlDUd2TRZ3Nu9gVha/iT9LcSe4V4lqIEIxHAPXUw8Q9Jnf1mtmTT0xJmTcyvAczB9fMO67Zd6X1esv343O97LjjjhVVd7qmjjQSbpGES/O1pr4h3VccAhKGi6DnU9KvWrVq09mUmUJwyJfyv4hL6ZQYBPyG64EHHihYjiHGZaruVJKXoE0/6qijrGPHjtq8V90bLvxAmjuFGYU5wpc2IXsrSbMUTvMlNc+GnAS4jotNmBG15TFar3Nzgw3C2xFHHBG6dFBxb6G6z2LPS74DSn1SWlJNBKqNgIThIt8oWrJBgwZtVh+wa9euruB2TY0HLPJRK/o0NvVY8RcvXuxq4lEoXi03AVyhxo8fb9QQpK64rFi1d7Ro7sR/97hqrlixwnr06GF169aN32GV9YBAPGPGDCP5E99PfTujvWCt14V5EfYxbtw4Vzte3nuFeWUe4fmddNJJ1rx58+gd6AwRqAACEoaLfEleqz1lypRNPfAh79evn5FUS00EREAEREAEREAEREAEREAERKDmEpAwHOPd4IJDNsznnntuUy9kWcQtp2nTpjF61qkiIAIiIAIiIAIiIAIiIAIiIAJpEpAwHJMuKc/79+/visT7RpwlGaYVAxUTrk4XAREQAREQAREQAREQAREQgZQISBiOCdYnmhk1atSm+OGGDRva0KFDrVmzZjF71+kiIAIiIAIiIAIiIAIiIAIiIAJpEJAwnABV4ocnTJhgM2fONMosUUajdevWCfSsLkRABERABERABERABERABERABNIgIGE4AapYh++9914bPXq0XXTRRUrhnwBTdSECIiACIiACIiACIiACIiACaRKQMJwA3UWLFtkVV1xhnTt3tu7du6s8RAJM1YUIiIAIiIAIiIAIiIAIiIAIpElAwnBMuhQjHzBggLVr18769OmjpFkxeep0ERABERABERABERABERABESgFAQnDMSj70kqNGjWyCy64QIJwDJY6VQREQAREQAREQAREQAREQARKSUDCcJG03333XRs5cqR99NFHduWVV9ouu+xSZE86TQREQAREQAREQAREQAREQAREoNQEJAwXQXzdunU2ZswYe/75523w4MHWtGnTInrRKSIgAiIgAiIgAiIgAiIgAiIgAuUiIGE4g/ydd95p8+bNs9WrV9uZZ55pxx133GZHUEZpypQpNn/+fLvsssusefPm5Xp3uq4IiIAIiIAIiIAIiIAIiIAIiECRBCQMZ4Bbv369kR368ssvt7Fjx1rLli03HUEJpblz59qkSZNc9ug0awl/+umnVqdOHWWmLnJg6zQREAEREAEREAEREAEREAERyEdAwnAWOnfffbfdddddNmzYMNttt93cEQjCCxYssGuvvdbOOOOM1GoJf/755/bKK6/YzTffbPvss48deeSR1rhxY41iERABERABERABERABERABERCBBAlIGM6AuWHDBmcRxkJ88cUXW7169dwRadcSJhHXjTfeaCtXrrStttrKCcT77ruvDRw4UFmqExzw6koEREAEREAEREAEREAEREAEICBhOGMckCW6X79+duihh1q3bt3cX30t4UMOOcR69epldevWTXX0TJs2zSZPnmynnXaa+6cmAiIgAiIgAiIgAiIgAiIgAiKQLAEJwxk8X3jhBWcRHjJkiLVq1cqefPJJGzRokIvfJWFWu3btkn0DGb0hePfv39/WrFljw4cPt7Zt26Z6PXUuAiIgAiIgAiIgAiIgAiIgArWRgIThjLd+zz332G233eYEUVyVJ06caNtvv72tXbvWTjnlFDv22GNTGScff/yxPfjgg85V+p133nHu2ePHj7e99947leupUxEQAREQAREQAREQAREQARGozQQkDAfePmWTEEARRnGTnjlzpn344Yd2/PHH2/Tp052FOLOUErWGKccUtm233XbWtWtXlxSLZFlvvvmmS8w1a9Yse+uttzZ1s/POO7tkXXvuuWfYrnWcCIiACIiACIiACIiACIiACIhASAIShgOgPvjgA7vkkkts+fLl1qJFC8Nlunfv3tasWbOQOPMfRv8rVqyw9957z/VNsqxPPvlki5MaNWpklFa65pprJAwnQl6diIAIiIAIiIAIiIAIiIAIiMDmBCQMB3i8/PLLduGFF9oBBxxgjz76qCunVI6GVXrZsmU2atQoCcPleAG6pgiIgAiIgAiIgAiIgAiIQNUTkDAceMUPP/ywjRkzxrlG4zJdjoYbdadOnVz88MiRIyUMl+Ml6JoiIAIiIAIiIAIiIAIiIAJVT0DC8BevGCvwDTfcYK+++qqdf/75Vr9+fZsyZYqL6T333HNt8eLFtuOOO9r++++/2aB46aWXbM6cOaEHCsLuiSeeaA0bNsx6DlmrFy5caLfccouE4dBUdaAIiIAIiIAIiIAIiIAIiIAIRCMgYfgLXmSLHjx4sDVp0sT69OnjSimR2Xn9+vXWs2dPl0zrhBNOsAYNGkQjXMTRZLRGEJdluAh4OkUEREAEREAEREAEREAEREAEQhCQMPwFJDJIX3XVVdarVy9XX5j2+uuv27hx41ySKwTkli1bhkAa/xAJw/EZqgcREAEREAEREAEREAEREAERyEdAwnANGR8I3Ndff70tWbLE1qxZ48o7UX5pp512svbt27sax2oiIAIiIAIiIAIiIAIiIAIiIALJEJAwnAxH9SICIiACIiACIiACIiACIiACIlBBBCQMV9DL0q2KgAiIgAiIgAiIgAiIgAiIgAgkQ0DCcDIc1YsIiIAIiIAIiIAIiIAIiIAIiEAFEZAwXEEvS7cqAiIgAiIgAiIgAiIgAiIgAiKQDAEJw8lwVC8iIAIiIAIiIAIiIAIiIAIiIAIVREDCcAW9LN2qCIiACIiACIiACIiACIiACIhAMgQkDCfDUb2IgAiIgAiIgAiIgAiIgAiIgAhUEIH/AzplmoWJiOo/AAAAAElFTkSuQmCC" style="font-size: inherit; color: inherit; line-height: inherit; padding: 0px; margin: 0px auto; max-width: 100%; display: inline-block; vertical-align: middle;">

方程两边乘以2得到:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAuAAAAA8CAYAAAAnvQ90AAAeQ0lEQVR4Xu2dB7QeRfnGhxpFQjASqkEBFQWkQ0BAJRCKGA2dgBQJSElosYCAElSkV0VQOAgSCMWAnAChKO1QIiKgKE0JHQIiFpo08z+/8bz5L1++b3dmd2fv/b77zDmcm8vdMvPszDvPW2ee2bNnz3ZqQkAICAEhIASEgBAQAkJACDSCwDwi4I3grJcIASEgBISAEBACQkAICAGPgAi4JoIQEAJCQAgIASEgBISAEGgQARHwBsHWq4SAEBACQkAICAEhIASEgAi45oAQEAJCQAgIASEgBISAEGgQARHwBsHWq4SAEBACQkAICAEhIASEgAi45oAQEAJCQAgIASEgBISAEGgQARHwBsHWq4SAEBACQkAICAEhIASEgAi45oAQEAJCQAgIASEgBISAEGgQARHwBsHWq4SAEBACQkAICAEhIASEgAi45oAQEAJCQAgIASEgBISAEGgQARHwBsHWq4SAEBACQkAICAEhIASEgAi45oAQEAJCQAgIASEgBISAEMhB4K233nLnnnuuu+2229zzzz/vTjnlFLfWWmuVxkwEvDR0ulEICAEhIASEgBAQAkJgICEwbdo0d/HFF7sTTjjBDR8+vPTQRcBLQ6cbhYAQEAJCQAgIASEgBAYKAm+//bY77bTT3D/+8Q935JFHuoUWWqj00EXAS0OnG4WAEBACQkAICAEhIAQGCgL//Oc/3eGHH+5WX311t/fee7t55pmn9NBFwEtDpxuFgBAQAkJACAgBISAEBgoCf/nLX9w3vvENd9hhh7n111+/0rBFwCvBp5uFgBAQAkJACAgBISAEBgICt9xyi/vJT37i9thjD3fXXXe5F154wc0777zu4IMPdp/85CejIOgzAv7mm2+6v/71r27WrFluyJAhbplllnFLLLGEHwh/e/zxx90nPvEJ/7uaEBACQkAICAEhIASEgBDoKwRmz57tzjrrLHfppZe6XXfd1e22225ugQUW8P+P0BQs4wsuuGBw9xon4JRx+fWvf+3OO+88t8EGG7g11ljDPffcc76sCwT8a1/7mrvooovcUkst5Qc4UBulbi688MI5w//sZz/r447e//73D1RIcsf91FNPea10v/32cx/5yEfaXsvcO+mkk9z1118/5+/bbbedGz9+/IBX9O6/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" style="font-size: inherit; color: inherit; line-height: inherit; padding: 0px; margin: 0px auto; max-width: 100%; display: inline-block; vertical-align: middle;">
两式相减得到:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwcAAAA8CAYAAAAzDca8AAAcCklEQVR4Xu2dBbBWxRvG17+BqKiIYoGKYheYOKJgoGIwtjMW4piIid0ttiiCiqLi2IojBggWjkUoNhJiB3Ynyn9+6ywcP77Yk98533125g5674k9z767+z5v7TyzZs2aZdSEgBAQAkJACAgBISAEhIAQaPIIzCNy0ORlQAAIASEgBISAEBACQkAICAGLgMiBBEEICAEhIASEgBAQAkJACAgBkQPJgBAQAkJACAgBISAEhIAQEAJzEJDnQNIgBISAEBACQkAICAEhIASEgDwHkgEhIASEgBAQAkJACAgBISAE5DmQDAgBISAEhIAQEAJCQAgIASFQgoDCiiQSQkAICAEhIASEgBAQAkJACFgERA4kCEJACAgBISAEhIAQEAJCQAiIHEgGhIAQEAJCQAgIASEgBISAEJiDgDwHkgYhIASEgBAQAkJACAgBISAE5DmQDAgBISAEhIAQEAJCQAgIASEgz4FkQAgIASEgBGog8Nlnn5mrrrrKTJo0ySy//PLm0ksvNS1bthRudUDgr7/+MkOGDDHjx483H374oenXr5/ZcMMN69CTxnnln3/+aW6++Wbz3HPPmc8//9zKujBtnPHVl0RHQGFF0bHTnUJACAiBhkfgt99+s6RggQUWMCeeeKL9tx5t5syZZp555jHzzjtvPV6fi3f++uuvZsSIEeaBBx4wl112mWnbtm0u+lX0TjzyyCPmrrvuqium//zzj0HG6zW/ij6G6n+yCIgcJIunniYEhIAQaCgEsKiecsoppkePHmbPPfeM/G0oPyj3/IRp3Ddt2jRzxx13mEMOOcSsuOKKYW5vqGtnzZplBg0aZD755BNz5plnmoUWWqihvq8eH4NH5pprrjHfffddLEwZG37+97//hf6Mb7/91txzzz2mXbt2pnv37qHv1w1CIGkERA6SRlTPEwJCQAg0EAKvvfaaOfnkk61VtUOHDpG/DIs3oUnrrbee1zN+/vlnG/JBCA0K18cff2wuv/zyJk0OwOScc84xq6++ujn00ENDEy0v4JvYRd9//705/fTTrWzHwRQ5feGFF8y+++7rjeDw4cPNk08+aRZbbDEbLnb00UebnXbayft+XSgE0kJA5CAtZPVcISAEhEADIEAIC4o9Me5LLbVU5C967LHHLDmI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" style="font-size: inherit; color: inherit; line-height: inherit; padding: 0px; margin: 0px auto; max-width: 100%; display: inline-block; vertical-align: middle;">
所以定理得证。因为堆由完全二叉树构成,所以堆的节点数在2h和2h+1之间,所以意味着这个和是O(N)。所以buildHeap是线性的。所以算法C的时间复杂度是:初始化数组为O(N),buildHeap为O(N),K次deleeMax需要O(klogN),所以总的时间复杂度是:O(N+N+klogN)=O(N+klogN)如果K为N/2时,运行时间是O(NlogN)

算法D:

  1. 算法思想:我们采用算法B的思想,只是我们这里构建一个节点数为K的小顶堆,只要下一个数比根节点大,就删除根节点,并将这个数进行下滤操作。所以算法最终的第K大数就是根节点的数。
  2. 时间复杂度:对K个数进行buildHeap是O(k),最坏情况下假设剩下的N-k个数都要进入堆中进行下滤操作,总的需要O(k+(N-k)logk)。如果K为N/2,则需要O(NlogN)。

算法E:快速选择

参考快速排序及其优化,使用快速排序的思想,进行一点点改动。

  • 算法思想:
  1. 如果S中元素个数是1,那么k=1并将S中的元素返回。如果正在使用小数组的截止方法且|S|<=CUTOFF,则将S排序并返回第K个最大元素
  2. 选取一个S中的元素v,称之为枢纽元(pivot);
  3. 将S-{v}(S中除了枢纽元中的其余元素)划分为两个不相交的集合S1和S2,S1集合中的所有元素小于等于枢纽元v,S2中的所有元素大于等于枢纽元;
  4. 如果k<=|S1|,那么第k个最大元必然在S1中。这时,我们返回quickSelect(S1,k)。如果k=1+|S1|,那么枢纽元就是第k个最大元,我们直接返回枢纽元。否则,这第k个最大元一定在S2中,它就是S2中的第(k-|S1|-1)个最大元。我们进行一次递归调用并返回quickSelect(S2,k-|S1|-1)。
  • java实现:
public class QuickSelect {
    /**
     * 截止范围
     */
    private static final int CUTOFF = 5;

    public static void main(String[] args) {
        Integer[] a = {8, 1, 4, 9, 6, 3, 5, 2, 7, 0, 12, 11, 15, 14, 13, 20, 18, 19, 17, 16};
        int k = 5;
        quickSelect(a, a.length - k + 1);
        System.out.println("第" + k + "大元素是:" + a[a.length - k]);
    }

    public static <T extends Comparable<? super T>> void quickSelect(T[] a, int k) {
        quickSelect(a, 0, a.length - 1, k);
    }

    private static <T extends Comparable<? super T>> void quickSelect(T[] a, int left, int right, int k) {
        if (left + CUTOFF <= right) {
            //三数中值分割法获取枢纽元
            T pivot = median3(a, left, right);

            //开始分割序列
            int i = left, j = right - 1;
            for (; ; ) {
                while (a[++i].compareTo(pivot) < 0) {
                }
                while (a[--j].compareTo(pivot) > 0) {
                }
                if (i < j) {
                    swapReferences(a, i, j);
                } else {
                    break;
                }
            }
            //将枢纽元与位置i的元素交换位置
            swapReferences(a, i, right - 1);

            if (k <= i) {
                quickSelect(a, left, i - 1, k);
            } else if (k > i + 1) {
                quickSelect(a, i + 1, right, k);
            }
        } else {
            insertionSort(a, left, right);
        }
    }

    private static <T extends Comparable<? super T>> T median3(T[] a, int left, int right) {
        int center = (left + right) / 2;
        if (a[center].compareTo(a[left]) < 0) {

            swapReferences(a, left, center);
        }
        if (a[right].compareTo(a[left]) < 0) {
            swapReferences(a, left, right);
        }
        if (a[right].compareTo(a[center]) < 0) {
            swapReferences(a, center, right);
        }
        // 将枢纽元放置到right-1位置
        swapReferences(a, center, right - 1);
        return a[right - 1];
    }

    public static <T> void swapReferences(T[] a, int index1, int index2) {
        T tmp = a[index1];
        a[index1] = a[index2];
        a[index2] = tmp;
    }

    private static <T extends Comparable<? super T>> void insertionSort(T[] a, int left, int right) {
        for (int p = left + 1; p <= right; p++) {
            T tmp = a[p];
            int j;

            for (j = p; j > left && tmp.compareTo(a[j - 1]) < 0; j--) {
                a[j] = a[j - 1];
            }

            a[j] = tmp;
        }
    }
}

//输出结果
//第5大元素是:16

因为我这里是升序排序,所以求第K大,与求第N-k+1是一样的。

  • 最坏时间复杂度:与快速排序一样,当一个子序列为空时,最坏为O(N2)。
  • 平均时间复杂度:可以看出,快速选择每次只用递归一个子序列。平均时间复杂度为O(N)。

四、总结

本篇详述了 求top(K)问题的几种解法,前两种十分平凡普通,后两种比较优一点,暂时给出求解中位数需要O(NlogN)时间。后面介绍使用快速选择方法,每次只用递归一个子序列,可以达到平均O(N)时间复杂度。

上一篇:java JDK8 学习笔记——第13章 时间与日期


下一篇:Android(java)学习笔记108:通过反射获取私有构造方法并且使用