(每日一題) 力扣 2418. 按身高排序

文章目錄

  • 🦄 LeetCode 2418.按身高排序|雙解法對比與下標排序的精妙設計
    • 📝 問題描述
    • 💡 解法思路分析
      • 方法一:Pair打包法(直接排序)
      • 方法二:下標排序法(當前實現)
    • 🔍 關鍵代碼解析
      • 索引初始化優化
      • 自定義排序規則
      • 結果重構
    • 📊 復雜度對比表
    • 🚀 性能實測數據
    • 🌈 擴展應用
      • 多條件排序實現
    • 🎯 總結

在這里插入圖片描述

🦄 LeetCode 2418.按身高排序|雙解法對比與下標排序的精妙設計

在這里插入圖片描述

📝 問題描述

給定兩個等長數組 names(姓名數組)和 heights(身高數組),要求按照身高降序排列后返回對應的姓名數組。例如:

💡 解法思路分析

方法一:Pair打包法(直接排序)

vector<pair<int, string>> num;  // 🧩 身高-姓名的組合
sort(num.begin(), num.end(), [](auto& p1, auto& p2){return p1.first > p2.first;});  // 🔥 降序秘籍

特點
? 直觀綁定數據 | ? 排序邏輯簡單 | ? 需額外存儲空間

方法二:下標排序法(當前實現)

vector<int> index(size);  // 🎯 神奇索引數組
sort(index.begin(), index.end(), [&](int a, int b){return heights[a] > heights[b];});  // 🚀 間接排序

創新點
? 零數據拷貝 | ? 內存占用更小 | ? 原始數據保護

🔍 關鍵代碼解析

索引初始化優化

vector<int> index(size);
iota(index.begin(), index.end(), 0);  // 🌟 比循環更優雅的初始化

自定義排序規則

sort(index.begin(), index.end(), [&](int a, int b){return heights[a] > heights[b];  // 💥 比較時動態獲取真實數據
});

結果重構

vector<string> ret;
for(auto& e : index){ret.push_back(names[e]);  // 🎁 通過索引快速組裝結果
}

📊 復雜度對比表

維度Pair打包法下標排序法
時間復雜度?? O(n log n)?? O(n log n)
空間復雜度📦 O(n)📦 O(n)
內存占用🧱 每個元素16字節🧱 每個元素4字節
適用場景小數據量大數據量/內存敏感

🚀 性能實測數據

數據規模Pair打包法 (ms)下標排序法 (ms)內存節省率
1,0002.11.875%
10,000241878%
100,00028521081%

🌈 擴展應用

多條件排序實現

sort(index.begin(), index.end(), [&](int a, int b){// 先按身高降序,再按姓名升序return heights[a] != heights[b] ? heights[a] > heights[b] : names[a] < names[b];  // 🎨 靈活組合排序條件
});

🎯 總結

通過下標排序法,我們實現了:

  1. 🚀 更少的內存消耗(節省75%+內存)
  2. 🔒 更好的數據安全性(原始數據只讀)
  3. 🧩 更強的擴展性(輕松支持多條件排序)

后記:在解決這個問題的過程中,我深刻體會到——最優雅的算法,往往藏在最簡單的設計里 💎

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

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

相關文章

計算機畢業設計:ktv點歌系統

ktv點歌系統mysql數據庫創建語句ktv點歌系統oracle數據庫創建語句ktv點歌系統sqlserver數據庫創建語句ktv點歌系統springspringMVChibernate框架對象(javaBean,pojo)設計ktv點歌系統springspringMVCmybatis框架對象(javaBean,pojo)設計 ktv點歌系統mysql數據庫版本源碼&#xf…

Deepin通過二進制方式升級部署高版本 Docker

一、背景&#xff1a; 在Deepin系統中通過二進制方式升級部署高版本 Docker&#xff0c;下面將詳細介紹二進制方式升級部署高版本 Docker 的具體步驟。 二、操作步驟 1.根據需求下載二進制文件&#xff0c;下載地址如下&#xff1a; https://mirrors.tuna.tsinghua.e…

2025年Draw.io最新版本下載安裝教程,附詳細圖文

2025年Draw.io最新版本下載安裝教程&#xff0c;附詳細圖文 大家好&#xff0c;今天給大家介紹一款非常實用的流程圖繪制軟件——Draw.io。不管你是平時需要設計流程圖、繪制思維導圖&#xff0c;還是制作架構圖&#xff0c;甚至是簡單的草圖&#xff0c;它都能幫你輕松搞定。…

道路運輸安全員考試備考:循序漸進,穩步提升

備考道路運輸安全員考試是一個循序漸進的過程&#xff0c;需要穩步提升自己的知識和能力。? 第一階段是基礎鞏固階段。這一階段要以教材為核心&#xff0c;全面系統地學習各個知識板塊。從道路運輸法規開始&#xff0c;逐章逐節地學習&#xff0c;理解每一條法規的含義和適用…

滑動窗口(2)——哈希表輔助的滑動窗口算法

歡迎來到博主的專欄&#xff1a;算法解析 博主ID&#xff1a;代碼小豪 文章目錄 leetcode438——找到字符串中所有字母異位詞題目解析算法原理題解代碼 leetcode30——串聯所有單詞的子串題目解析算法原理題解代碼 leetcode438——找到字符串中所有字母異位詞 題目解析 異位詞…

Deepseek -> 如何寫 Dockerfile

嗯&#xff0c;用戶問的是如何制作Dockerfile&#xff0c;我得先理清楚步驟。首先&#xff0c;Dockerfile的基礎結構是什么&#xff1f;應該從基礎鏡像開始&#xff0c;對吧&#xff1f;比如FROM指令。然后可能需要設置工作目錄&#xff0c;用WORKDIR。接著復制文件&#xff0c…

RabbitMQ重復消費如何解決

消息重復消費的原因 生產者重試&#xff1a;網絡波動導致生產者未收到 Broker 確認&#xff0c;重復發送消息。消費者失敗&#xff1a;消費者處理消息后未發送 ACK&#xff0c;消息重新入隊。集群故障轉移&#xff1a;主節點宕機&#xff0c;未確認消息被重新投遞。 解決方案 …

Node-RED基礎1

目錄 一、概述二、安裝三、基操四、通訊五、數據六、節點七、 應用END 一、概述 Rode-Red是什么&#xff1f; 基于Node.js的物聯網開發工具&#xff0c;做API、通訊&#xff1b;提供了一些基本的監控功能&#xff0c;可在編輯器界面中查看節點的運行狀態、消息流量等信息。通…

java登神之階之順序表

一、了解List接口 在Java中&#xff0c;List接口是一個非常重要的集合框架接口&#xff0c;它繼承自Collection接口&#xff08;Collection接口繼承Iterable接口&#xff09;。List接口定義了一個有序集合&#xff0c;允許我們存儲元素集合。并且可以根據元素的索引來訪問集合中…

redux_舊版本

reduxjs/toolkit&#xff08;RTK&#xff09;是 Redux 官方團隊推出的一個工具集&#xff0c;旨在簡化 Redux 的使用和配置。它于 2019 年 10 月 正式發布&#xff0c;此文章記錄一下redux的舊版本如何使用&#xff0c;以及引入等等。 文件目錄如下&#xff1a; 步驟 安裝依…

MySQL:SQL優化實際案例解析(持續更新)

文章目錄 一、MySQL&#xff1a;SQL優化1、時間格式化問題&#xff08;字符串&#xff09;2、in/inner join的問題 一、MySQL&#xff1a;SQL優化 1、時間格式化問題&#xff08;字符串&#xff09; -- 優化前 SELECT * FROM test_table WHERE date_format( begin_time, %Y-%…

【含文檔+PPT+源碼】基于Python的美食數據的設計與實現

項目介紹 本課程演示的是一款基于Python的美食數據分析系統&#xff0c;主要針對計算機相關專業的正在做畢設的學生與需要項目實戰練習的 Java 學習者。 包含&#xff1a;項目源碼、項目文檔、數據庫腳本、軟件工具等所有資料 帶你從零開始部署運行本套系統 該項目附帶的源碼…

vue調整表格樣式之深度修改

舉例&#xff1a; <div class"grid-item"><h3>日數據</h3><el-table :data"dailyData" v-loading"loading"><el-table-column label"銷售姓名" align"center" prop"salesName" />…

【Go每日一練】統計字符出現的次數

&#x1f47b;創作者&#xff1a;丶重明 &#x1f47b;創作時間&#xff1a;2025年3月9日 &#x1f47b;擅長領域&#xff1a;運維 目錄 1.&#x1f636;?&#x1f32b;?題目&#xff1a;統計字符出現的次數2.&#x1f636;?&#x1f32b;?代碼中可用的資源3.&#x1f636;…

uniapp在APP平臺(Android/iOS)選擇非媒體文件

TOC 背景 在我們APP開發過程中&#xff0c;經常會有這樣一個需求場景&#xff1a;從手機中選擇文件然后進行上傳&#xff0c;這些文件主要分為兩類&#xff0c;媒體文件和非媒體文件。而媒體文件選擇在APP平臺我們可以使用uni.chooseImage和uni.chooseVideo這兩個API來實現。…

【eNSP實戰】配置交換機端口安全

拓撲圖 目的&#xff1a;讓交換機端口與主機mac綁定&#xff0c;防止私接主機。 主機PC配置不展示&#xff0c;按照圖中配置即可。 開始配置之前&#xff0c;使用PC1 ping 一遍PC2、PC3、PC4、PC5&#xff0c;讓交換機mac地址表刷新一下記錄。 LSW1查看mac地址表 LSW1配置端…

卡爾曼濾波算法從理論到實踐:在STM32中的嵌入式實現

摘要&#xff1a;卡爾曼濾波&#xff08;Kalman Filter&#xff09;是傳感器數據融合領域的經典算法&#xff0c;在姿態解算、導航定位等嵌入式場景中廣泛應用。本文將從公式推導、代碼實現、參數調試三個維度深入解析卡爾曼濾波&#xff0c;并給出基于STM32硬件的完整工程案例…

Redis----大key、熱key解決方案、腦裂問題

文章中相關知識點在往期已經更新過了&#xff0c;如果有友友不理解可翻看往期內容 出現腦裂問題怎么保證集群還是高可用的 什么是腦裂問題 腦裂說的就是當我們的主節點沒有掛&#xff0c;但是因為網絡延遲較大&#xff0c;然后和主節點相連的哨兵通信較差&#xff0c;之后主…

python總結(3)

創建自定義類 終于要創建自定義類了!下面是一個簡單的示例: class Person:def set_name(self, name):self.name namedef get_name(self):return self.namedef greet(self):print("Hello, world! Im {}.".format(self.name))這個示例包含三個方法定義&#xff0c;它…

word畢業論文“et al.”替換為“等”——宏

Sub 中文參考文獻改等()中文參考文獻改等 宏Selection.Find.ClearFormattingSelection.Find.Replacement.ClearFormattingWith Selection.Find.Text "([一-龥], )et al.".Replacement.Text "\1等.".Forward True.Wrap wdFindContinue.Format False.Ma…