当前位置: 首页 > Web前端 > HTML

215.数组中第K大的元素-算法(leetcode,附思维导图+全解)300题

时间:2023-03-28 19:29:34 HTML

零题目:算法(leetcode,附思维导图+全解)300题(215)数组第K大元素1.题目描述2.解概览(思维导图)3.全部解法1方案11)代码://方案1《排序-下标定位法(self)》。//思路://1)按降序排列nums。//2)返回nums上的第k个。varfindKthLargest=function(nums,k){//1)按降序排列nums。nums=nums.sort((a,b)=>b-a);//2)返回nums上的第k个。returnnums[k-1];}2Scheme21)代码://Scheme2“不完全冒泡法(self)”。//思路://1)状态初始化:l=nums.length;.//2)核心:2层for循环,i的范围是[0,k),j的范围是[i+1,l)。//2.1)始终确保第一个i按降序排序。//3)返回结果:数组中第K大的元素(即nums[k-1])。varfindKthLargest=function(nums,k){//1)状态初始化:l=nums.length;.constl=nums.length;//2)核心:2层for循环,i的范围是[0,k),j的范围是[i+1,l)。for(leti=0;i{for(leti=Math.floor(heapSize/2)-1;i>=0;i--){maxHeapify(nums,i,heapSize);}};//从左到右,从上到下调整节点constmaxHeapify=(nums=[],index=0,heapSize=0)=>{constleft=2*index+1,right=2*index+2;让largestIndex=指数;if(leftnums[largestIndex]){largestIndex=left;}if(rightnums[largestIndex]){largestIndex=right;}if(largestIndex!==index){//节点调整swap(nums,index,largestIndex);//继续调整后面的非叶子节点(递归)maxHeapify(nums,largestIndex,heapSize);}};constswap=(nums=[],i=0,j=0)=>{consttemp=nums[i];nums[i]=nums[j];nums[j]=温度;};//1)状态初始化,l=nums.length;heapSize=nums.length;constl=nums.length;让heapSize=nums。长度;//2)建立一个大的顶堆。buildMaxHeap(nums,heapSize);//3)继续k-1次“构建大顶堆”。//Sinking大顶堆就是最大的元素下沉到最后。//注意:“数组中第K个最大的元素”,所以i>=l-k+1就足够了。for(leti=l-1;i>=l-k+1;i--){//因为bigtopheap是在swap(nums,0,i)之前构建的;--堆大小;//重新调整大顶堆maxHeapify(nums,0,heapSize);}//4)返回结果nums[0]//注意:此时大顶堆已经构造了k次,所有的nums[0]都是第k大。returnnums[0];};4资源分享&更多1历史文章-概览2博主简介码农三少,致力于编写极简但完整的解决方案(算法)的博主。专注一题多解,结构化思维,欢迎一起刷LeetCode~

最新推荐
猜你喜欢