力扣網編程274題:H指數之普通解法(中等)

一. 簡介

本文記錄力扣網上涉及數組,排序方面的編程題:H指數。

二.?力扣網編程274題:H指數(中等)

給你一個整數數組 citations ,其中 citations[i] 表示研究者的第 i 篇論文被引用的次數。計算并返回該研究者的 h 指數。
根據維基百科上 h 指數的定義:h 代表“高引用次數” ,一名科研人員的 h 指數 是指他(她)至少發表了 h 篇論文,并且 至少 有 h 篇論文被引用次數大于等于 h 。如果 h 有多種可能的值,h 指數 是其中最大的那個。

示例 1:
輸入:citations = [3,0,6,1,5]
輸出:3?
解釋:給定數組表示研究者總共有 5 篇論文,每篇論文相應的被引用了 3, 0, 6, 1, 5 次。
? ? ?由于研究者有 3 篇論文每篇 至少 被引用了 3 次,其余兩篇論文每篇被引用 不多于 3 次,所以她的 h 指數是 3。

示例 2:
輸入:citations = [1,3,1]
輸出:1

解題思路一:(排序后統計)

題目是尋找最大的 h,使得至少有 h 篇論文被引用 ≥h 次。

首先,對數組進行降序排序,即從大到小排序;

其次,從左向右遍歷數組,如果?citations[i]? > h 時,說明至少有 h+1篇文章引用次數 >= (h+1),因此可以安全的將 h自增1;

最后返回 h即為指數。

這種方法利用了排序后的特性:

當遍歷到第 i 篇論文時,前面已經有 i 篇論文的引用次數 ≥ citations[i]。

如果?citations[i]? > h 時,說明至少有 h+1篇文章引用次數 >= (h+1)。

可以這里理解上面的特性:

? ? citations[i]:當遍歷到第i個元素值citations[i],表示前 i+1 篇論文的引用次數 ≥ citations[i](降序數組的特性)。
? ? citations[i] > h,因此:
? ? 前 i+1 篇論文的引用次數必然都 > h(因為它們 ≥ citations[i] > h)。
? ? 此時,至少有 i+1 篇論文的引用次數 > h,即:
? ? 至少有 i+1 篇論文的引用次數 ≥ h+1。


? ? 如果 i+1 ≥ h+1(即當前遍歷到的論文數量足夠),則說明:
? ? 存在 h+1 篇論文的引用次數 ≥ h+1,因此 H 指數可以更新為 h+1。

舉例說明:

舉個例子:如果某人有 5 篇論文,引用次數是 [3, 0, 6, 1, 5],排序后為[6,5,3,1,0]
從前往后看:第 1 篇(6)≥ 1 → 至少有 1 篇 ≥ 1第 2 篇(5)≥ 2 → 至少有 2 篇 ≥ 2第 3 篇(3)≥ 3 → 至少有 3 篇 ≥ 3第 4 篇(1)< 4 → 不滿足 4 篇 ≥ 4

具體方法如下:

1. 首先初始化一個變量:h=0,來統計指數;

2. 其次,從大到小進行排序;

3. 從前往后遍歷數組,判斷 citations[i] > h,當滿足時,h自增1。

4.循環退出,最后的 h即所求的指數;

C語言實現如下:

//從大到小排序
int small_to_large(const void* a, const void* b) {return *(int*)b- *(int*)a;
}int hIndex(int* citations, int citationsSize) {int i;int h = 0;qsort(citations, citationsSize, sizeof(int), small_to_large);for(i = 0; i < citationsSize; i++) {if(citations[i] > h) {h++;}}return h;
}

可以看出,排序解法的時間復雜度為 O (n log n)。

下一篇文章使用計數排序解法進行處理:

力扣網編程274題:H指數之計數排序(中等)-CSDN博客

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

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

相關文章

iptables防火墻,多IP環境下, 指定某個目的IP地址通過某個本地IP訪問,策略路由!

需求在CentOS 7.9中&#xff0c;若需從特定源IP&#xff08;10.0.0.3&#xff09;訪問目標網段 1.1.1.0/24方法一&#xff1a;策略路由&#xff08;支持網段&#xff09;1. 創建自定義路由表# 添加名為custom_table的路由表&#xff08;ID200&#xff09; echo "200 custo…

數字孿生技術引領UI前端設計新趨勢:數據可視化與交互設計的深度融合

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩!一、引言&#xff1a;數字孿生驅動 UI 設計的范式革新在大數據與三維可視化技術爆發的今天&…

【機器學習筆記 Ⅱ】6 激活函數

激活函數是神經網絡的核心組件&#xff0c;其作用遠不止“引入非線性”。以下是系統化的解析&#xff1a;1. 核心作用 (1) 引入非線性沒有激活函數&#xff1a;多層神經網絡等價于單層線性變換&#xff08;矩陣連乘仍是線性&#xff09;。加入激活函數&#xff1a;每層通過非線…

AI無標記動捕如何結合VR大空間技術打造沉浸式游戲體驗

隨著數字科技的迅猛發展&#xff0c;VR大空間技術正逐步成為各行業探索沉浸式體驗的重要方向。在VR游戲領域&#xff0c;市場對于高度沉浸式體驗的需求日益增長&#xff0c;而傳統VR游戲主要依賴手柄和基礎體感進行交互&#xff0c;而在VR大空間中&#xff0c;用戶可以通過全身…

Qt智能指針

在 Qt 框架中&#xff0c;智能指針用于自動管理對象的生命周期&#xff0c;防止內存泄漏。以下是 Qt 中主要的智能指針及其用法詳解&#xff1a;1. QScopedPointer作用&#xff1a;獨占所有權&#xff0c;超出作用域時自動釋放對象&#xff08;類似 std::unique_ptr&#xff09…

408第三季part2 - 計算機網絡 - 信道利用率

理解t1是發送幀的傳輸時間t2是確認幀的傳輸時間中間是傳播過程這整個過程就是發送周期任何題目會有以下幾種情況題目這里數據幀和確認幀長度是一樣的t1 t2然后把t1的傳輸數據算出來然后傳播是0.2sd停止等待 k1確認幀忽略t2 0t1算好后&#xff0c;求數據幀的長度下面是速率&…

Android framework 開發者模式下,如何修改動畫過度模式

Android framework 開發者模式下&#xff0c; 如何修改動畫過度模式 開發者模式下&#xff0c;動畫過度 模式1.0→0.5&#xff0c;按如下方式修改。 開發云 - 一站式云服務平臺 .../core/java/com/android/server/wm/WindowManagerService.java | 8 ---- 1 file changed, …

win11安裝paddlelabel并創建目標檢測項目

創建虛擬環境 conda create -n paddlelabel python3.11.11 conda activate paddlelabel通過以下命令安裝 pip install --upgrade paddlelabel輸入命令pdlabel運行paddlelabel&#xff0c;發現報錯&#xff1a; ModuleNotFoundError: Please install connexion using the flask …

關于Novatek B/G-R/G白平衡色溫坐標系再探究

目錄 一、準備知識 二、色溫坐標系的構建 三、Novatek白平衡色溫坐標系的再探究 2.1 直線白點框 2.2雙曲線白點框 四、仿真代碼 之前寫的一篇博文關于聯詠(Novatek )白平衡色溫坐標系探究-CSDN博客感覺邏輯上有些混亂,這個周末我又好好思考了下,以…

基于路徑質量的AI負載均衡異常路徑檢測與恢復策略

AI流量往往具有突發性、大象流&#xff08;大規模數據流&#xff09;占比高的特點&#xff0c;極易造成網絡擁塞熱點。一條質量不佳&#xff08;如高延遲、高丟包、帶寬受限&#xff09;的路徑&#xff0c;不僅自身無法有效傳輸數據&#xff0c;如果ECMP繼續向其分發流量&#…

ubuntu22.04 安裝cuda cudnn

1.輸入nvidia-smi查看可以支持安裝的cuda最大版本 2.cuda與cudnn版本的選擇 核心原則 向下兼容性&#xff1a;較新的 cuDNN 通常兼容舊版 CUDA&#xff0c;但反之不成立 框架依賴&#xff1a;優先考慮深度學習框架&#xff08;TensorFlow/PyTorch&#xff09;的版本要求 硬件…

5、Receiving Messages:Message Listener Containers

提供了兩個MessageListenerContainer實現&#xff1a; KafkaMessageListenerContainer ConcurrentMessageListener容器 KafkaMessageListenerContainer在單個線程上接收來自所有主題或分區的所有消息。ConcurrentMessageListenerContainer委托給一個或多個KafkaMessageListe…

JDBC 注冊驅動的常用方法詳解

JDBC 注冊驅動的常用方法詳解 在 JDBC 中&#xff0c;注冊驅動是建立數據庫連接的第一步。以下是幾種常用的驅動注冊方式&#xff1a; 1. 顯式類加載&#xff08;傳統方式&#xff09; // 通過 Class.forName() 加載驅動類 Class.forName("com.mysql.cj.jdbc.Driver&qu…

插入數據優化

目錄 一.插入數據優化 1.insert語句優化 ①批量插入 ②手動提交事務 ③主鍵順序插入 2.大批量插入數據&#xff08;100萬條&#xff09; 舉例 第一步&#xff1a;連接數據庫時&#xff0c;加上--local-infile屬性 第二步&#xff1a;查看全局參數local_infile的值&…

區塊鏈在域名系統安全中的應用進展綜述

一、區塊鏈與DNS結合的核心原理1.1 傳統DNS的安全缺陷中心化架構&#xff1a;傳統DNS依賴中心化服務器&#xff08;如ICANN管理的根服務器&#xff09;&#xff0c;存在單點故障風險&#xff0c;易受DDoS攻擊或配置錯誤影響。協議脆弱性&#xff1a;DNS協議設計之初缺乏加密和認…

GO Web 框架 Gin 完全解析與實踐

目錄 1. 為什么選擇 Gin?解鎖 Go Web 開發的超能力 Gin 的核心優勢 什么時候用 Gin? 第一個 Hello World 2. 路由的藝術:從簡單 GET 到復雜匹配 基礎路由 高級路由技巧 性能優化小貼士 3. 中間件的魔法:讓請求處理更聰明 內置中間件 自定義中間件 中間件的最佳實…

RabbitMQ使用topic Exchange實現微服務分組訂閱

案例場景&#xff1a;用戶下單后需要多個微服務&#xff08;如營銷、會員&#xff09;分別訂閱并處理訂單事件&#xff0c;且每個微服務可能有多個集群實例&#xff0c;需要保證同一個微服務的集群中&#xff0c;只有一個實例消費到消息。不同于Kafka和rocketMQ有分組消費的功能…

kotlin 通道trysend方法

trySend 方法是 Kotlin 協程中 Channel 類的一個重要功能。它用于向通道發送元素&#xff0c;但與 send 方法不同的是&#xff0c;trySend 是非阻塞的。這意味著它不會在通道滿時掛起當前協程&#xff0c;而是會立即返回。 trySend 方法的效果 非阻塞行為&#xff1a; 當你調用…

winform CheckedListBox單擊選中解決方案

在WinForms的CheckedListBox控件中&#xff0c;默認需要雙擊才能切換選中狀態&#xff08;復選框勾選&#xff09;。要實現單擊即選中&#xff0c;需要通過代碼處理鼠標點擊事件并手動切換選中狀態。以下是實現步驟&#xff1a; 1.CheckOnClick屬性置為true即可。 2.通過事件處…

Docker文件操作、數據卷、掛載

一&#xff1a;容器文件操作 在Docker環境中&#xff0c;管理容器內部的文件是一個常見的需求。 無論是為了配置應用、備份數據還是調試問題&#xff0c;了解如何高效地進行文件操作都是非常重要的。 docker cp命令提供了一種簡單的方法來在宿主主機和容器之間復制文件或目錄…