力扣每日打卡16 781. 森林中的兔子(中等)

力扣 781. 森林中的兔子 中等

  • 前言
  • 一、題目內容
  • 二、解題方法
    • 1. 哈希函數(來自評論區大佬的解題方法)
    • 2.官方題解
      • 2.1 方法一:貪心


前言

這是刷算法題的第十六天,用到的語言是JS
題目:力扣 781. 森林中的兔子 (中等)


一、題目內容

森林中有未知數量的兔子。提問其中若干只兔子 “還有多少只兔子與你(指被提問的兔子)顏色相同?” ,將答案收集到一個整數數組 a n s w e r s answers answers 中,其中 a n s w e r s [ i ] answers[i] answers[i] 是第 i i i 只兔子的回答。

給你數組 a n s w e r s answers answers ,返回森林中兔子的最少數量。

示例 1:

輸入:answers = [1,1,2]
輸出:5
解釋:
兩只回答了 “1” 的兔子可能有相同的顏色,設為紅色。
之后回答了 “2” 的兔子不會是紅色,否則他們的回答會相互矛盾。
設回答了 “2” 的兔子為藍色。
此外,森林中還應有另外 2 只藍色兔子的回答沒有包含在數組中。
因此森林中兔子的最少數量是 5 只:3 只回答的和 2 只沒有回答的。
示例 2:

輸入:answers = [10,10,10]
輸出:11

提示:

1 < = a n s w e r s . l e n g t h < = 1000 1 <= answers.length <= 1000 1<=answers.length<=1000
0 < = a n s w e r s [ i ] < 1000 0 <= answers[i] < 1000 0<=answers[i]<1000

二、解題方法

1. 哈希函數(來自評論區大佬的解題方法)

挺好想的吧,第i個兔子回答有x個相同的親兄弟,加上它自己,這種兔子至少有x + 1個,當第j個兔子也回答有x個親兄弟時,其實就兩種情況:

  1. 第j個兔子和第i個兔子同屬一個陣營,它們互為親兄弟
  2. 第j個兔子和第i個兔子不屬于同一個陣營,它們不是親兄弟

下面具體分析:
當有兔子回答x時,一定存在一個最多容納x+1個兔子的兔子陣營,且同屬于一個陣營的兔子的回答都是一樣的,都是x,因此我們記錄有多少只兔子回答了x,即mp[x] = y就表示有y只兔子回答了 x
解釋為:一個最多容納x+1只兔子的兔子陣營,找到了y只兔子在這個陣營中,y == 1表示這個陣營第一次出現,而當y == x + 1時表示這個陣營已經滿了,后續還有兔子回答x時已經是另一個新陣營的兔子了,咱們只在y == 1時收集答案,即只出現新陣營時才收集答案,這樣就避免了重復計算了和漏計算

代碼如下(示例):

/*** @param {number[]} answers* @return {number}*/
var numRabbits = function (answers) {// 哈希表?let count = 0const map = new Map()for (const x of answers) {// 記錄當前答案出現的次數, 一開始是0,首次添加時為1map.set(x, (map.get(x) || 0) + 1)if (map.get(x) > x + 1) map.set(x, 1) // 產生了新的顏色陣營if (map.get(x) === 1) count += x + 1 // 出現新陣營 或者 答案次數只有1的話,就加上陣營的兔子數量// 補充,為什么兩個if調換順序就出問題// 調換后,錯誤的新增計數: // 假設某個顏色(兔子回答) x 的出現次數當前為 x + 1,而這時有另一個兔子也說 x。因為我們先檢查了 map.get(x) === 1,會在這個時候錯誤地將這個陣營的數量加到 count 中,即使它實際上應該被標記為已滿。// 沒有正確重置計數:// 如果沒有首先檢查是否超過最大次數(x + 1),那么我們就無法及時重置計數為 1,而是錯誤地累加到現有計數基礎上,這會導致最終的計數不準確,增加了不該計數的兔子。}return count
}

2.官方題解

2.1 方法一:貪心

cv

代碼如下(示例):

var numRabbits = function(answers) {const count = new Map();for (const y of answers) {count.set(y, (count.get(y) || 0) + 1);}let ans = 0;for (const [y, x] of count.entries()) {ans += Math.floor((x + y) / (y + 1)) * (y + 1);}return ans;
};作者:力扣官方題解
鏈接:https://leetcode.cn/problems/rabbits-in-forest/solutions/698444/sen-lin-zhong-de-tu-zi-by-leetcode-solut-kvla/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
復雜度分析:
時間復雜度: O ( n ) O(n) O(n),其中 n n n 是數組 a n s w e r s answers answers 的長度。
空間復雜度: O ( n ) O(n) O(n)。最壞情況下,哈希表中含有 n n n 個元素。

鏈接:力扣本題官方題解
來源:力扣(LeetCode)

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

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

相關文章

基于深度學習的線性預測:創新應用與挑戰

一、引言 1.1 研究背景 深度學習作為人工智能領域的重要分支&#xff0c;近年來在各個領域都取得了顯著的進展。在線性預測領域&#xff0c;深度學習也逐漸興起并展現出強大的潛力。傳統的線性預測方法在處理復雜數據和動態變化的情況時往往存在一定的局限性。而深度學習憑借…

黑馬點評redis改 part 3

優惠券秒殺 全局唯一id 每個店鋪都可以發布優惠券&#xff1a; 當用戶搶購時&#xff0c;就會生成訂單并保存到tb_voucher_order這張表中&#xff0c;而訂單表如果使用數據庫自增ID就存在一些問題&#xff1a;實際開發中數據庫ID一般不會參與業務邏輯 增加一個訂單號字段就好…

低代碼開發平臺:企業數字化轉型的加速器

一、引言 在數字化時代&#xff0c;企業的轉型需求日益迫切。為了在激烈的市場競爭中保持領先地位&#xff0c;企業需要快速響應市場變化、優化業務流程、提升運營效率。然而&#xff0c;傳統的軟件開發模式往往面臨開發周期長、成本高、靈活性差等問題&#xff0c;難以滿足企業…

個人所得稅

文章目錄 一、名詞解釋二、個人所得稅計算方法 (舉例)1.累計預扣預繳應納稅所得額、本期應預扣預繳稅額2.個人所得稅預扣率表一3.個人所得稅計算舉例 三、專項附加扣除政策介紹四、年度匯算清繳政策介紹五、常見問答 一、名詞解釋 累計預扣法是指扣繳義務人在一個納稅年度內預…

二進制和docker兩種方式部署Apache pulsar(standalone)

#作者&#xff1a;閆乾苓 文章目錄 1、二進制安裝部署Pulsar(standalone)1.1 安裝配置JDK1.2 下載解壓pulsar安裝包1.3 啟動獨立模式的Pulsar 集群1.4 創建主題測試1.5 向主題寫入消息測試1.6 從主題中讀取消息測試 2.docker安裝部署Pulsar(standalone)2.1 使用docker 啟動Pul…

如何在 Go 中創建和部署 AWS Lambda 函數

AWS Lambda 是一個無服務器計算平臺&#xff0c;您可以使用自己喜歡的編程語言編寫代碼&#xff0c;無需擔心設置虛擬機。 您只需為 Lambda 函數的調用次數和運行時間&#xff08;毫秒&#xff09;付費。 我們大多數人都了解 JavaScript 和 Python&#xff0c;但它們的內存效率…

STM32配置系統時鐘

1、STM32配置系統時鐘的步驟 1、系統時鐘配置步驟 先配置系統時鐘&#xff0c;后面的總線才能使用時鐘頻率 2、外設時鐘使能和失能 STM32為了低功耗&#xff0c;一開始是關閉了所有的外設的時鐘&#xff0c;所以外設想要工作&#xff0c;首先就要打開時鐘&#xff0c;所以后面…

[安全實戰]逆向工程核心名詞詳解

逆向工程核心名詞詳解 一、調試與執行類 1. 斷點&#xff08;Breakpoint&#xff09; 定義&#xff1a;在代碼中設置標記&#xff0c;使程序執行到此處時暫停類型&#xff1a; 普通斷點&#xff1a;通過INT3指令實現條件斷點&#xff1a;滿足特定條件時觸發內存斷點&#xf…

Mac mini 安裝mysql數據庫以及出現的一些問題的解決方案

首先先去官網安裝一下mysql數據庫&#xff0c;基本上都是傻瓜式安裝的流程&#xff0c;我也就不詳細說了。 接下來就是最新版的mysql安裝的時候&#xff0c;他就會直接讓你設置一個新的密碼。 打開設置&#xff0c;拉到最下面就會看到一個mysql的圖標&#xff1a; 我設置的就是…

聚寬策略----國九條后中小板微盤小改,年化135.40%

最近在研究的聚寬策略&#xff0c;一般技術分析的我直接轉qmt了&#xff0c;財務因子有一點麻煩&#xff0c;我直接利用我開發強大的服務器系統&#xff0c;直接讀取信號&#xff0c;最近在優化一下系統&#xff0c;最近在開發對接bigquant的交易系統&#xff0c;完成了api數據…

C語言狀態字與庫函數詳解:概念辨析與應用實踐

C語言狀態字與庫函數詳解&#xff1a;概念辨析與應用實踐 一、狀態字與庫函數的核心概念區分 在C語言系統編程中&#xff0c;"狀態字"和"庫函數"是兩個經常被混淆但本質完全不同的概念&#xff0c;理解它們的區別是掌握系統編程的基礎。 1. 狀態字&…

End-to-End從混沌到秩序:基于LLM的Pipeline將非結構化數據轉化為知識圖譜

摘要:本文介紹了一種將非結構化數據轉換為知識圖譜的端到端方法。通過使用大型語言模型(LLM)和一系列數據處理技術,我們能夠從原始文本中自動提取結構化的知識。這一過程包括文本分塊、LLM 提示設計、三元組提取、歸一化與去重,最終利用 NetworkX 和 ipycytoscape 構建并可…

Leetcode 3523. Make Array Non-decreasing

Leetcode 3523. Make Array Non-decreasing 1. 解題思路2. 代碼實現 題目鏈接&#xff1a;3523. Make Array Non-decreasing 1. 解題思路 這一題思路上來說就是一個棧的問題&#xff0c;就是從后往前依次考察每一個元素&#xff0c;顯然&#xff0c;當前位置要么被舍棄&…

探秘STM32如何成為現代科技的隱形引擎

STM32單片機原理與應用 前言&#xff1a;微型計算機的硅腦 在我們身邊的每一個智能設備中&#xff0c;都隱藏著一個小小的"硅腦"——單片機。它們體積微小&#xff0c;卻能執行復雜的運算和控制功能&#xff0c;就像是現代科技世界的"神經元"。STM32系列…

機制的作用

“機制”是一個廣泛使用的概念&#xff0c;其含義和應用范圍因領域而異。在不同的學科和實際應用中&#xff0c;機制有著不同的定義和功能。以下從幾個主要領域對“機制”進行詳細解釋&#xff1a; 一、自然科學中的機制 &#xff08;一&#xff09;物理學 定義 在物理學中&…

prim最小生成樹+最大生成樹【C++】板子題

什么是最小生成樹&#xff1f; 在一給定的無向圖G (V, E) 中&#xff0c;(u, v) 代表連接頂點 u 與頂點 v 的邊&#xff0c;而 w(u, v) 代表此的邊權重&#xff0c;若存在 T 為 E 的子集&#xff08;即&#xff09;且為無循環圖&#xff0c;使得的 w(T) 最小&#xff0c;則此 …

讀書筆記--MySQL索引

索引(在 MySQL 中也叫做“鍵(key)”)是存儲引擎用于快速找到記錄的一種數據結構。 索引對于良好的性能非常關鍵。尤其是當表中的數據量越來越大時&#xff0c;索引對性能的影響愈發重要。在數據量較小且負載較低時&#xff0c;不恰當的索引對性能的影響可能還不明顯&#xff0c…

VS Code 遠程連接服務器:Anaconda 環境與 Python/Jupyter 運行全指南。研0大模型學習(第六、第七天)

VS Code 遠程連接服務器&#xff1a;Anaconda 環境與 Python/Jupyter 運行全指南 在使用 VS Code 通過 SSH 遠程連接到服務器進行開發時&#xff0c;尤其是在進行深度學習等需要特定環境的工作時&#xff0c;正確配置和使用 Anaconda 環境以及理解不同的代碼運行方式非常關鍵。…

字節頭條golang二面

docker和云服務的區別 首先明確Docker的核心功能是容器化&#xff0c;它通過容器技術將應用程序及其依賴項打包在一起&#xff0c;確保應用在不同環境中能夠一致地運行。而云服務則是由第三方提供商通過互聯網提供的計算資源&#xff0c;例如計算能力、存儲、數據庫等。云服務…

數據結構和算法(七)--樹

一、樹 樹是我們計算機中非常重要的一種數據結構&#xff0c;同時使用樹這種數據結構&#xff0c;可以描述現實生活中的很多事物&#xff0c;例如家譜、單位的組織架構、等等。 樹是由n(n>1)個有限結點組成一個具有層次關系的集合。把它叫做"樹"是因為它看起來像一…