最小的K个数 Posted on 2019-08-13 | In 剑指offer | | reads times 最小的K个数题目描述 输入n个整数,找出其中最小的K个数。 基于快排思想的寻找第K大的数。 快排每一趟可以将a[0]在数组中的位置找到,且其位置左侧均为小于a[0]的数,右侧均为大于a[0]的数 所以只要找到第K大的数,其左侧则为最小的K个数。 12345678910111213141516171819202122232425262728293031323334function GetLeastNumbers_Solution(input, k){ // write code here const left=0; const right=input.length-1; if(k<1||input.length===0||k>input.length) return []; let key=partition(input,left,right); while(key !== k - 1){ if(key > k- 1){ key=partition(input,left,key-1); }else{ key=partition(input,key+1,right); } } const res=input.slice(0,key+1); res.sort((a,b)=>a-b); return res; }function partition(arr,left,right){ let key=arr[left]; while(left<right){ while(key<=arr[right]&&left<right){ right--; } [arr[left],arr[right]]=[arr[right],arr[left]]; while(key>=arr[left]&&left<right){ left++; } [arr[left],arr[right]]=[arr[right],arr[left]]; } return left;} Post author: GoldMiner Xun Post link: https://goldminerxun.github.io/2019/08/13/%E5%89%91%E6%8C%87offer%20JavaScript%E7%89%88%20(29)/ Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.