分治-快排-215.數組中的第k個最大元素-力扣(LeetCode)

一、題目解析

1、需返回排序好的第k個最大元素

2、要求時間復雜度為O(N)

二、算法原理

解法1:堆排序(大根堆) k*O(N)

借用大堆的性質,將元素插入到大堆中,按照k輸出堆頂第k個元素

解法2:堆排序(小根堆) (N-k)*O(logN)

先建k個小堆,然后插入元素,依次與堆頂元素比較,比堆頂元素大,則pop(刪除堆頂元素)掉堆頂元素,插入nums[i],最終小堆中存儲前k個最大的數

解法3:分治-快排 O(N)

基于數組分三塊+隨機數選擇元素

通過埋下隨機數種子srand(time(NULL)),rand() % (right-left+1) + left,找到隨機數下標,得到基準元素key

由i移動遍歷數組,left = -1,right = nums.size()+1,如果nums[i]<key,? ? swap(nums[i++],nums[++left]);如果nums[i] == key,i++;如果nums[i]>key,swap(nums[i],nums[--right])

依據排序好的數組,統計區間各個元素的個數判斷情況

三、代碼示例

解法1:

int findKthLargest(vector<int>& nums, int k){sort(nums.begin(),nums.end(),greater<int>());return nums[k-1];// O(N)//大堆priority_queue<int> pq(nums.begin(),nums.end());while(--k){pq.pop();}return pq.top();//K*logN}

解法2:

int findKthLargest(vector<int>& nums, int k){//小堆//(N-K)*logNpriority_queue<int,vector<int>,greater<int>> pq(nums.begin(),nums.begin()+k);//建k個數的小堆for(int i = k;i < nums.size();i++){if(nums[i] > pq.top()){pq.pop();pq.push(nums[i]);}}return pq.top();}

解法3:

int findKthLargest(vector<int>& nums, int k){//快排srand(time(NULL));return qsort(nums,0,nums.size()-1,k);}int qsort(vector<int>& nums,int l,int r,int k){if(l == r) return nums[l];//隨機選擇基準元素int key = getRandom(nums,l,r);//基準元素分三塊int left = l-1,right = r+1,i = l;while(i<right){if(nums[i]<key) swap(nums[++left],nums[i++]);else if(nums[i] == key) i++;else swap(nums[i],nums[--right]);}//分情況討論int c = r - right +1,b = right - left - 1;if(c>=k) return qsort(nums,right,r,k);else if(b+c>=k) return key;else return qsort(nums,l,left,k-b-c);}int getRandom(vector<int>& nums,int left,int right){return nums[rand() % (right - left + 1) + left];}

看到最后,如果對您有所幫助,還請點贊、收藏和關注,我們下期再見!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/92317.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/92317.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/92317.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

新手向:Python實現圖片轉ASCII藝術

Python實現圖片轉ASCII藝術&#xff1a;從零開始的完整指南Python實現圖片轉ASCII藝術的技術解析ASCII藝術是一種使用字符組合來表現圖像的技術&#xff0c;這種技術源于早期計算機顯示器的圖形限制&#xff0c;如今已成為一種獨特的數字藝術形式。ASCII藝術的應用場景十分廣泛…

6.類與對象(二)

總結 本章寫了封裝、static成員以及代碼塊。 一、封裝 1.封裝的概念 封裝簡單來說就是被密封起來&#xff08;不讓我們看見的東西&#xff09;&#xff0c;即被隱藏。 對于用戶來說&#xff0c;并不需要關心的類&#xff0c;所實現的細節就會被封裝&#xff08;隱藏&#x…

流形折疊與條件機制

1. 為什么要防止流形折疊&#xff08;mode collapse&#xff09; 流形折疊 生成器只學會輸出極少數甚至單一模式&#xff08;mode&#xff09;的樣本&#xff0c;而完全忽略數據分布的多樣性。 后果一句話&#xff1a;“模型看起來生成了很多圖&#xff0c;其實都在重復同一張…

《從零構建大語言模型》學習筆記2,文本數據處理1(以及tiktoken庫無法下載gpt2參數,調用get_encoding時SSL超時的解決方法)

《從零構建大語言模型》學習筆記2&#xff0c;文本數據處理1 文章目錄《從零構建大語言模型》學習筆記2&#xff0c;文本數據處理1前言1、分詞2.將把提取出來的詞元轉換為數字ID3.添加特殊上下文標記4. 字節對編碼&#xff08;以及tiktoken庫無法下載gpt2參數&#xff0c;調用g…

【AI工具】解放雙手,操控瀏覽器的工具對比,來了

&#x1f4d2;前言在github上面&#xff0c;有幾個操作瀏覽器的mcp工具&#xff1a;browser-use / browser-usemicrosoft / playwright-mcpAgentDeskAI / browser-tools-mcphangwin / mcp-chrome想知道他們的區別嗎&#xff0c;想知道那個更適合你嗎&#xff0c;想。。。&#…

Linux 操作系統基礎知識總結

1、操作系統總體介紹 CPU&#xff1a; 就像人的大腦&#xff0c;主要負責相關事情的判斷以及實際處理的機制。 查詢指令&#xff1a; cat /proc/cpuinfo 內存&#xff1a; 大腦中的記憶區塊&#xff0c;將皮膚、眼睛等所收集到的信息記錄起來的地方&#xff0c;以供CPU進行判斷…

cudagraph 本質詳解

理解 CUDA Graph 的本質,關鍵在于理解它解決了什么問題,以及它通過什么機制來解決這個問題。 一、 核心問題:傳統 CUDA 編程的“CPU 瓶頸” 在 CUDA Graph 出現之前,我們通常使用 CUDA Stream 來向 GPU 提交任務。這是一個動態的過程: CPU 作為指揮官:CPU 循環地、逐條…

Spring MVC 父子容器深度解析:原理、實戰與優化

1. 父子容器的定義與設計初衷一句話總結&#xff1a;父子容器的核心價值在于解耦 Web 層與業務層&#xff0c;實現職責分離與上下文隔離。1.1 父子容器的層次關系在 Spring MVC 中&#xff0c;容器分為兩類&#xff1a;父容器&#xff08;Root ApplicationContext&#xff09;&…

AI賦能SEO關鍵詞優化策略

內容概要 人工智能&#xff08;AI&#xff09;技術正深刻改變著搜索引擎優化&#xff08;SEO&#xff09;的實踐方式&#xff0c;尤其在關鍵詞研究這一核心領域帶來了革命性的影響。本文聚焦于AI如何賦能SEO關鍵詞優化策略&#xff0c;系統性地探討其核心價值與應用路徑。我們將…

虛擬機Ubuntu圖形化界面root用戶登錄錯誤

當在 Ubuntu 圖形界面登錄 root 用戶出現錯誤無法進入時 1. 檢查 PAM 配置文件 PAM&#xff08;Pluggable Authentication Modules&#xff0c;可插拔認證模塊&#xff09;負責管理用戶認證相關的策略。圖形登錄界面的 PAM 配置文件通常是 /etc/pam.d/gdm-password 。以管理員權…

【雜談】-逆縮放悖論:為何更多思考會讓AI變“笨“?

逆縮放悖論&#xff1a;為何更多思考會讓AI變"笨"&#xff1f; 文章目錄逆縮放悖論&#xff1a;為何更多思考會讓AI變"笨"&#xff1f;1、解碼逆縮放現象2、AI 推理失效的五大癥結3、AI 推理應對復雜度的策略圖譜4、人工智能評估體系的反思5、人工智能推理…

強制用戶更改WordPress密碼的重要性及實現方法

確保 WordPress 網站的安全性是每位網站管理者的重要任務。在網絡安全日益受到關注的今天&#xff0c;為用戶提供安全、穩定的網絡環境至關重要。而一個有效的方法就是強制用戶定期更改密碼。這篇文章將介紹為什么要強制用戶更改密碼以及如何在 WordPress 中實現這一功能。同時…

計算機基礎速通--數據結構·串的應用

如有問題大概率是我的理解比較片面&#xff0c;歡迎評論區或者私信指正。 友友們&#xff0c;我遇到了一個大問題&#xff0c;技術類的英文面&#xff08;ai應用開發/java后端偏金融方向&#xff09;該如何準備&#xff1f;本人英語就過了個六級&#xff0c;腦闊疼額。友友們有…

05--STL認識(了解)

1. STL概念——標準模板庫 STL(standard template libaray-標準模板庫)&#xff1a;是C標準庫的重要組成部分&#xff0c;不僅是一個可復用的組件庫&#xff0c;而且是一個包羅數據結構與算法的軟件框架。 STL與CPP標準庫的關系&#xff1a; 2. STL的版本 3. STL的組成 4. STL…

VBA經典應用69例應用9:ReDim語句的語法

《VBA經典應用69例》&#xff08;版權10178981&#xff09;&#xff0c;是我推出的第九套教程&#xff0c;教程是專門針對初級、中級學員在學習VBA過程中可能遇到的案例展開&#xff0c;這套教程案例眾多&#xff0c;緊貼“實戰”&#xff0c;并做“戰術總結”&#xff0c;以便…

連鎖店管理系統的庫存跟蹤功能:數字化轉型下的零售運營核心

在連鎖零售行業&#xff0c;庫存管理的效率直接決定著運營成敗。傳統人工庫存管理模式早已難以應對全渠道銷售時代的復雜需求&#xff0c;而連鎖店管理系統的庫存跟蹤功能&#xff0c;正成為解決庫存難題、提升客戶體驗的關鍵武器。本文將深入解析施易德&#xff08;cegid&…

Nestjs框架: 接口安全與響應脫敏實踐 --- 從攔截器到自定義序列化裝飾器

接口安全問題&#xff1a;敏感數據脫敏的必要性 在用戶注冊成功后&#xff0c;若直接將用戶數據&#xff08;如密碼、ID 等&#xff09;返回給前端&#xff0c;存在嚴重的安全風險 為此&#xff0c;需要在接口響應前對數據進行脫敏處理 關鍵點&#xff1a; 敏感字段&#xff…

Python包與虛擬環境工具全景對比:從virtualenv到uv的演進

Python 的開發環境管理一直是綜合性的工程問題。隨著工具和規范的不斷進化&#xff0c;我們看到了從 virtualenv / pip 開始&#xff0c;到 pipenv 和 poetry 的環境一體化&#xff0c;再到 uv 和 hatch 這樣的一體化、高性能新生代工具。 本文將對比這些工具的特點、優勢和選型…

期貨和期權對沖后能盈利嗎?

本文主要介紹期貨和期權對沖后能盈利嗎&#xff1f;期貨和期權作為金融衍生品的兩大核心工具&#xff0c;其組合對沖策略的盈利性取決于市場走勢、策略設計、成本管控及風險對沖效果。對沖的本質是降低風險&#xff0c;但通過合理設計&#xff0c;部分策略可在對沖風險的同時創…

【其他分類】Showrunner AI版的Netflix 互動故事創作平臺 進行動畫生成與微調、角色場景創建

Showrunner是一個AI 驅動的角色場景動畫。視覺風格較為統一&#xff0c;偏向 3D Q 版卡通風格&#xff0c;支持語音對白修改、鏡頭相機切換、動畫角色和場景設置等功能。 論文原文中文翻譯官方地址pdf版 、網頁版pdf版https://www.showrunner.xyz/ 當前的2D 動畫軟件&#xff…