算法通關村第十關 | 數組中第k個最大元素

1.數組中第k大的數字

題目:

LeetCode:數組中的第k個最大元素,給定整數數組nums和整數k,請返回數組中第k個最大的元素,請注意,你需要找的是數組排序后第k個最大的元素,而不是第k個不同的元素。

運用快速排序的方法對數組進行排好序,然后選擇第k個元素就是要求的結果,

上一節我們寫了以中間元素作為哨兵的情況,這里我們來看下第一個元素作為哨兵,需要排序的序列是:

{26, 53, 48, 15, 13, 48, 32, 15 },我們以26為哨兵。

?上面紅框位置表示哨兵交換過后的位置,根據指針的移動情況,當指針停止的時候進行比較,大于哨兵,就去哨兵的左側,而它空下來的位置就給哨兵,即紅色圈出的位置

雙指針移動:

left: arr[left] < pivot時,不移動,arr[left] > pivot時,left++。

right: arr[right] > pivot時,不移動,否則,right--。

對比上一節的代碼實現方式,我們來看下另一種的實現:

public void quickSort(int[] nums, int left, int right){int start = left;int end = right;//取中間位置作為哨兵int pivot = nums[(end + start) / 2];//每次循環將大的放左邊,小的放右邊while (start < end){while (nums[start] > pivot){start++;}while (nums[end] < pivot){end--;}//如果start>=end,說明左邊的值都大于pivot,右邊的反之if (start >= end){break;}//交換int temp = nums[start];nums[start] = nums[end];nums[end] = temp;//兩個指針指向最中間的兩個元素的時候,交換過后,兩個指針就不會移動了,所以需要再次處理//左邊指針等于pivot的時候,使右邊指針向左移動,if (nums[start] == pivot){end--;}//右邊指針等于pivot的時候,左邊向左移動if (nums[end] == pivot){start++;}}if (start == end){start++;end--;}if (left < end){quickSort(nums,left,end);}if (right > start){quickSort(nums,start,right);}}

對比上篇文章的代碼,還是上篇文章的代碼更容易理解,建議用下面代碼:

    public void quickSort2(int[] nums, int left, int right){if (left >= right){return;}int start = left;int end = right;int pivot = nums[(left+right) / 2];while (left <= right){//左邊都是大于pivot的元素while (nums[left] > pivot){left++;}//右邊都是小于pivot的元素while (nums[right] < pivot){right--;}if (left <= right){//交換int temp = nums[left];nums[left] = nums[right];nums[right] = temp;left++;right--;}}//向左遞歸quickSort2(nums,start,right);quickSort2(nums,left,end);}

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

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

相關文章

JVM——配置常用參數,GC調優策略

文章目錄 JVM 配置常用參數Java內存區域常見配置參數概覽堆參數回收器參數項目中常用配置常用組合 常用 GC 調優策略GC 調優原則GC 調優目的GC 調優策略 JVM 配置常用參數 Java內存區域常見配置參數概覽堆參數&#xff1b;回收器參數&#xff1b;項目中常用配置&#xff1b;常…

element-Plus中el-menu菜單無法正常收縮解決方案

<el-menu :collapse"true">如圖所示收縮之后&#xff0c;有子級的菜單還有箭頭文字顯示 從代碼對比看層級就不太對了&#xff0c;嵌套錯誤了&#xff0c;正常下方官網的ul標簽下直接是li&#xff0c;在自己的代碼中&#xff0c;ul標簽下是div標簽&#xff0c;層…

FairyGUI編輯器自定義菜單擴展插件

本文涉及到的軟件有&#xff1a;FairyGUI&#xff0c;VSCode 代碼環境涉及到了&#xff1a;Lua VSCode插件&#xff1a;EmmyLua 在編寫FairyGUI編輯器菜單前&#xff0c;了解一下FairyGUIEditor的API會有效的幫助我們解決很多問題。FairyGUI的擴展是通過編輯器自帶的插件功能…

【嵌入式】MKV31F512VLL12 微控制器 (MCU) 、Cyclone? IV E EP4CE10E22I8LN,FPGA-現場可編程門陣列芯片

1、MKV31F512VLL12 微控制器 (MCU) 是適用于BLDC、PMSM和ACIM電機控制應用的高性能解決方案。這些MCU采用運行頻率為100MHz/120MHz、帶數字信號處理 (DSP) 和浮點單元 (FPU) 的ARM Cortex-M4內核。KV3x MCU配備兩個采樣率高達1.2MS/s的16位ADC、多個控制定時器以及512KB閃存。 …

Codeforces Round 893 (Div. 2) D.Trees and Segments

原題鏈接&#xff1a;Problem - D - Codeforces 題面&#xff1a; 大概意思就是讓你在翻轉01串不超過k次的情況下&#xff0c;使得a*&#xff08;0的最大連續長度&#xff09;&#xff08;1的最大連續長度&#xff09;最大&#xff08;1<a<n&#xff09;。輸出n個數&…

模糊測試面面觀 | 模糊測試工具知多少

自1988年威斯康星大學的Barton Miller首次提出模糊測試這一概念以來&#xff0c;模糊測試領域經歷了持續長久發展。模糊測試作為一種軟件測試方法&#xff0c;旨在通過向程序輸入模糊、隨機、異常的數據&#xff0c;探測和發現潛在的漏洞和錯誤。這種方法備受安全研究人員的青睞…

助推打造全球研發中心城市 | 李彥團隊:研發,帶來了二次文藝復興

2017年&#xff0c;長沙經聯合國教科文組織評選&#xff0c;成為中國首座獲評世界“媒體藝術之都”稱號的城市。6年后&#xff0c;基于時代發展的新要求&#xff0c;長沙再次提出了“打造全球研發中心城市”的目標&#xff0c;并朝著新的方向邁進。 舊有的優勢產業在新的研發浪…

信安通用基礎知識

文章目錄 密碼學經典誤區PGP優良保密協議信安經典其它安全手段XSS與CSRF cross site request forgeryCSRF的利用邏輯CSRF示例CSRF防范檢查Referer字段添加校驗token XSS cross site scripting common weakness enumeration常見密碼api誤用&#xff08;摘自畢設參考文獻&#xf…

“深入探究JVM內部機制:如何實現Java程序的運行環境?“

標題&#xff1a;深入探究JVM內部機制&#xff1a;如何實現Java程序的運行環境&#xff1f; 摘要&#xff1a;本文將深入探究Java虛擬機&#xff08;JVM&#xff09;的內部機制&#xff0c;重點討論JVM如何實現Java程序的運行環境。我們將從JVM的結構、類加載、內存管理、垃圾…

01 Python 網絡爬蟲:爬蟲技術的核心原理

不夸張地說&#xff0c;現在哪怕是初中生&#xff0c;只要花點兒時間、精力稍微按「網絡爬蟲」的開發步驟學習了解一下&#xff0c;也能把它玩得賊溜。 聽起來感覺是很高大上的東西&#xff0c;但實際上并不復雜&#xff0c;也就是使用了某種編程語言按照一定步驟、規則主動通…

用Java實現原神抽卡算法

哈嘍~大家好&#xff0c;好久沒有更新了&#xff0c;也確實遇到了很多事&#xff0c;這篇開始恢復更新&#xff0c;喜歡的話&#xff0c;可以給個的三連&#xff0c;什么&#xff1f;你要白嫖&#xff1f;那可以給個免費的贊麻。 &#x1f947;個人主頁&#xff1a;個人主頁??…

七月 NFT 行業解讀:游戲和音樂 NFT 引領增長,Opepen 掀起熱潮

作者&#xff1a;lesleyfootprint.network 2023 年 7 月&#xff0c;NFT 市場的波動性持續存在&#xff0c;交易量呈下降趨勢。然而&#xff0c;游戲和音樂 NFT 等領域的增長引人注目。參與這些細分領域的獨立用戶數量不斷增加&#xff0c;反映了這些領域的復蘇。 本綜合報告…

lvs負載均衡群集

lvs組成 1、lvs基于內核態的netfilter框架實現的IPVS功能&#xff0c;工作在內核態用戶配置VIP等相關信息并且傳遞到IPVS 就需要用到IPVSadm工具。 2、ipvsadm&#xff1a;IPVSadm是lvs用戶態的配套的工具&#xff0c;可以實現VIP和RS 增刪改查。 IPVSadm就是類似于iptables…

侯捷 八部曲 C++面向對象高級開發(上)+(下)【C++學習筆記】 超詳細 萬字筆記總結 筆記合集

文章目錄 Ⅰ C part1 面向對象編程1 頭文件與類的聲明1.1 c vs cpp關于數據和函數1.2 頭文件與類1.2.1 頭文件1.2.2 class的聲明1.2.3 模板初識 2 構造函數2.1 inline 函數2.2 訪問級別2.3 ctor 構造函數2.3.1 ctor 的寫法2.3.2 ctor/函數 重載2.3.3 ctor 放在 private 區 2.4 …

記vite打包vue項目內存溢出問題解決

出現問題 FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory解決方法一&#xff1a; 1.根據網上的資料是通過全局下載npm包increase-memory-limit&#xff1a; npm install -g increase-memory-limit2.在項目目錄執…

學習Vue:路由參數與查詢參數傳遞

在Vue.js中&#xff0c;路由與導航不僅涉及到頁面之間的切換&#xff0c;還包括了向頁面傳遞參數以及獲取查詢參數的功能。本文將詳細介紹如何在Vue Router中傳遞路由參數和查詢參數&#xff0c;幫助您更好地理解和使用這些功能。 路由參數的傳遞 路由參數是指在URL中的動態片…

K8s內部的網路模式實現理解

overlay 網絡模式 在 Kubernetes 中&#xff0c;overlay 網絡模式被用于實現容器之間的網絡通信。 K8s 使用了一種稱為容器網絡接口&#xff08;Container Network Interface&#xff0c;簡稱CNI&#xff09;的規范&#xff0c;該規范定義了容器如何進行網絡連接。實際上&…

SDP 與Rtcp-fb

1、sdp介紹 SDP&#xff08;Session Description Protocol&#xff09;是一種用于描述多媒體會話的協議&#xff0c;它在會話層起著重要的作用。SDP的主要功能是提供會話的元數據和配置信息&#xff0c;以便參與者能夠協商和建立一致的會話。 以下是SDP在會話層的作用&#x…

生活隨筆,記錄我的日常點點滴滴.

前言 &#x1f618;個人主頁&#xff1a;曲終酣興晚^R的小書屋&#x1f971; &#x1f615;作者介紹&#xff1a;一個莽莽撞撞的&#x1f43b; &#x1f496;專欄介紹&#xff1a;日常生活&往事回憶 &#x1f636;?&#x1f32b;?每日金句&#xff1a;被人暖一下就高熱&…

catboost推理開GPU加速

核心設置 model.predict(feature, task_type‘GPU’) 代碼參考 # 訓練配置 params {"catboost": {"n_estimators": 7000,"learning_rate": 0.03,"eval_metric": "AUC","loss_function": "RMSE",&qu…