Day16:最小的k個數

倉庫管理員以數組?stock?形式記錄商品庫存表,其中?stock[i]?表示對應商品庫存余量。請返回庫存余量最少的?cnt?個商品余量,返回?順序不限

示例 1:

輸入:stock = [2,5,7,4], cnt = 1
輸出:[2]

示例 2:

輸入:stock = [0,2,3,6], cnt = 2
輸出:[0,2] 或 [2,0]

LCR 159. 庫存管理 III - 力扣(LeetCode)

首先考慮用TreeSet來實現這個代碼,因為TreeSet會基于紅黑樹自動幫我們排序。

class Solution {public int[] inventoryManagement(int[] stock, int cnt) {TreeSet<Integer> treeSet = new TreeSet<>();for(int i = 0; i < stock.length; i++){treeSet.add(stock[i]);}// 取出最小的 cnt 個元素int[] result = new int[cnt];int index = 0;for (int num : treeSet) {if (index < cnt) {result[index++] = num;} else {break; // 已經取夠 cnt 個元素,退出循環}}return result;}
}

很明顯,不合適,因為Set集合會去重。

下面改用快排,快排的時間復雜度為O(n),剛好復習一下快排的代碼。

class Solution {public int[] inventoryManagement(int[] stock, int cnt) {quickSort(stock, 0, stock.length - 1);int[] result = new int[cnt];for(int i = 0; i < cnt; i++){result[i] = stock[i];}return result;}public void quickSort(int[] stock, int low, int high){if (low < high) {// 找到分區點int partitionIndex = partition(stock, low, high);// 遞歸排序左半部分quickSort(stock, low, partitionIndex - 1);// 遞歸排序右半部分quickSort(stock, partitionIndex + 1, high);}}public int partition(int[] stock, int low, int high){//找到基準元素int pivot = stock[low];int left = low + 1;   //左指針int right = high;  //右指針while(left <= right){while(left <= right && stock[right] > pivot){right--;}while(left <= right && stock[left] < pivot){left++;}if(left <= right){swap(stock,left,right);left++;right--;}}swap(stock,right,low);return right;}private void swap(int[] stock, int i, int j) {int temp = stock[i];stock[i] = stock[j];stock[j] = temp;}}

快排的核心全在partition算法里,本質是確定分區點,每一次分區就代表這個元素被排好了。

我們分析一下改怎么寫,如何確定最后return的是左邊還是右邊。

我們把最左端定為哨兵,也就是說最后的位置左邊必須比哨兵小,右邊必須比哨兵大。while循環的條件是left<=right。首先收縮邊界,然后交換,最后的情況是right指著最后一個小于或等于?pivot?的元素。因此要pivot和right換。

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

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

相關文章

【最后203篇系列】016 Q201架構思考

前言 Q200已經達到了我既定的目標&#xff0c;在最近的3個月&#xff0c;我需要進一步完善&#xff0c;達到可以試產的程度。 在這個過程當中&#xff0c;許多知識和體會一直在變。 qtv200到目前&#xff0c;雖然通過習慣(每晚運行離線策略和比對)方式維持了注意力的集中&…

音視頻入門基礎:RTP專題(20)——通過FFprobe顯示RTP流每個packet的信息

通過FFprobe命令&#xff1a; ffprobe -protocol_whitelist "file,rtp,udp" -of json -show_packets XXX.sdp 可以顯示SDP描述的RTP流每個packet&#xff08;數據包&#xff09;的信息&#xff1a; 對于RTP流&#xff0c;上述的“packet”&#xff08;數據包&#…

信息系統運行管理員教程6--信息系統安全

信息系統運行管理員教程6–信息系統安全 第1節 信息系統安全概述 1.信息系統安全的概念 信息系統安全是指保障計算機及其相關設備、設施&#xff08;含網絡&#xff09;的安全&#xff0c;運行環境的安全&#xff0c;信息的安全&#xff0c;實現信息系統的正常運行。信息系統…

LLM后訓練:解鎖大型語言模型推理能力的關鍵路徑

引言&#xff1a;從語言生成到邏輯推理的躍遷 大型語言模型&#xff08;LLMs&#xff09;通過預訓練掌握了海量語言模式&#xff0c;但其核心缺陷——幻覺、邏輯斷裂、價值觀偏差——暴露了單純預訓練的局限性。后訓練&#xff08;Post-Training&#xff09;作為預訓練后的精修…

9.貪心算法

簡單貪心 1.P10452 貨倉選址 - 洛谷 #include<iostream> #include<algorithm> using namespace std;typedef long long LL; const int N 1e510; LL a[N]; LL n;int main() {cin>>n;for(int i 1;i < n;i)cin>>a[i];sort(a1,a1n);//排序 LL sum 0…

Linux 網絡:skb 數據管理

文章目錄 1. 前言2. skb 數據管理2.1 初始化2.2 數據的插入2.2.1 在頭部插入數據2.2.2 在尾部插入數據 2.2 數據的移除 3. 小結 1. 前言 限于作者能力水平&#xff0c;本文可能存在謬誤&#xff0c;因此而給讀者帶來的損失&#xff0c;作者不做任何承諾。 2. skb 數據管理 數…

批量給 Excel 添加或刪除密碼保護|Excel 批量設置打開密碼和只讀密碼

我們在將 Excel 文檔發送給第三方或者進行存檔的時候&#xff0c;對 Excel 文檔添加密碼保護是非常重要的一個操作。添加保護后的 Excel 文檔。就只能有相應權限的用戶才能夠打開或者編輯操作。尤其是當我們 Excel 文檔中內容非常敏感非常重要的時候&#xff0c;添加保護就顯得…

藍耘MaaS平臺:阿里QWQ應用拓展與調參實踐

摘要&#xff1a;本文深入探討了藍耘MaaS平臺與阿里QWQ模型的結合&#xff0c;從平臺架構、模型特點到應用拓展和調參實踐進行了全面分析。藍耘平臺憑借其強大的算力支持、彈性資源調度和全棧服務&#xff0c;為QWQ模型的高效部署提供了理想環境。通過細化語義描述、調整推理參…

使用 Docker 部署前端項目全攻略

文章目錄 1. Docker 基礎概念1.1 核心組件1.2 Docker 工作流程 2. 環境準備2.1 安裝 Docker2.2 驗證安裝 3. 項目配置3.1 項目結構3.2 創建 Dockerfile 4. 構建與運行4.1 構建鏡像4.2 運行容器4.3 訪問應用 5. 使用 Docker Compose5.1 創建 docker-compose.yml5.2 啟動服務5.3 …

Vue中使用到的padStart方法是什么

padStart() 是 JavaScript 字符串對象的一個方法&#xff0c;用于在字符串的開頭填充指定的字符&#xff0c;直到字符串達到指定的長度。這在需要對字符串進行格式化&#xff0c;使其保持固定長度時非常有用&#xff0c;比如在日期格式化時&#xff0c;確保月份、日期等為兩位數…

springboot集成flink實現DM數據庫同步到ES

前言 今天分享的其實是一個面試上機方案&#xff0c;就是監測DM數據庫數據&#xff0c;同步到ES&#xff0c;使用flink實現。基本套路&#xff0c;其實也沒啥好說的&#xff0c;非要說也就是&#xff0c;國家隊還是很多不跟你玩啊&#xff0c;雖然flink有阿里在背后&#xff0c…

springboot jackson 日期格式配置

一、JacksonProperties JacksonProperties是一個用ConfigurationProperties(prefix“spring.jackson”)注解修飾的類&#xff0c;所以可以通過以spring.jackson為前綴的配置去賦值。 JacksonAutoConfiguration會通過Jackson2ObjectMapperBuilderCustomizer實現類根據JacksonPr…

【藍橋杯】24省賽:數字串個數

思路 本質是組合數學問題&#xff1a; 9個數字組成10000位數字有9**10000可能 不包括3的可能8**10000 不包括7的可能8**10000 既不包括3也不包括77**10000 根據容斥原理&#xff1a;結果為 9 ? ? 10000 ? 8 ? ? 10000 ? 8 ? ? 10000 7 ? ? 10000 9**10000 - 8**10…

AGI大模型(7):提示詞應用

1 生成數據 LLM具有?成連貫?本的強?能?。使?有效的提示策略可以引導模型產?更好、更?致和更真實的響應。LLMs還可以特別有?地?成數據,這對于運?各種實驗和評估?常有?。例如,我們可以使?它來為情感分類器?成快速樣本,如下所示: 提示: ?成10個情感分析的范…

Unity開發中對象池設計與使用

一、設計目的 為了避免頻繁創建和銷毀對象&#xff08;例如 UI 元素、事件對象等&#xff09;帶來的內存分配和垃圾回收壓力&#xff0c;可以使用對象池來管理對象來提高游戲的性能&#xff0c;避免游戲卡頓。 二、代碼實現 public interface IRecycle {/// <summary>…

JVM并發編程AQSsync鎖ReentrantLock線程池ThreadLocal

并發編程2 synchronized鎖實現**AQS****ReentrantLock實現****JUC 常用類**池的概念 ThreadLocalThreadLocal原理內存泄露強引用:軟引用弱引用虛引用ThreadLocal內存泄露 synchronized鎖實現 synchronized是一個關鍵字,實現同步,還需要我們提供一個同步鎖對象,記錄鎖狀態,記錄…

【JavaEE】網絡原理之初識

1.????前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 親愛的朋友們&#x1f44b;&#x1f44b;&#xff0c;這里是E綿綿呀????。 如果你喜歡這篇文章&#xff0c;請別吝嗇你的點贊????和收藏&#x1f4d6;&#x1f4d6;。如果你對我的…

操作系統-八股

進程基礎&#xff1a; 進程定義&#xff1a;運行中的程序&#xff0c;有獨立的內存空間和地址&#xff0c;是系統進行資源調度和分配的基本單位。 并發&#xff0c;并行 并發就是單核上面輪詢&#xff0c;并行就是同時執行&#xff08;多核&#xff09;&#xff1b; 進程上下…

ffmpeg面試題整理

1. 基礎概念 問題&#xff1a;FFmpeg 是什么&#xff1f;它的核心功能有哪些&#xff1f; 編解碼&#xff1a;支持幾乎所有音視頻格式&#xff08;如 H.264, AAC, MP3&#xff09;。轉換&#xff1a;在不同容器格式之間轉換&#xff08;如 MP4 → MKV&#xff09;。流處理&…

chrome瀏覽器插件拓展捕獲頁面的響應體內容

因為chrome extension官方沒有的直接獲取響應體的方法&#xff0c;所以需要自己實現方法來獲取&#xff0c;實現的方式有很多種&#xff0c;這是記錄的第二種&#xff0c;第一種就是使用vconsole來實現&#xff0c;vconsole是一個開源框架&#xff0c;一個輕量、可拓展、針對手…