力扣隨機一題 哈希表 排序 數組

  • 博客主頁:誓則盟約
  • 系列專欄:IT競賽 專欄
  • 關注博主,后期持續更新系列文章
  • 如果有錯誤感謝請大家批評指出,及時修改
  • 感謝大家點贊👍收藏?評論??

2491.劃分技能點相等的團隊【中等

題目:

給你一個正整數數組?skill?,數組長度為?偶數?n?,其中?skill[i]?表示第?i?個玩家的技能點。將所有玩家分成?n / 2?個?2?人團隊,使每一個團隊的技能點之和?相等?。

團隊的?化學反應?等于團隊中玩家的技能點?乘積?。

返回所有團隊的?化學反應?之和,如果無法使每個團隊的技能點之和相等,則返回?-1?。

示例 1:

輸入:skill = [3,2,5,1,3,4]
輸出:22
解釋:
將玩家分成 3 個團隊 (1, 5), (2, 4), (3, 3) ,每個團隊的技能點之和都是 6 。
所有團隊的化學反應之和是 1 * 5 + 2 * 4 + 3 * 3 = 5 + 8 + 9 = 22 。

示例 2:

輸入:skill = [3,4]
輸出:12
解釋:
兩個玩家形成一個團隊,技能點之和是 7 。
團隊的化學反應是 3 * 4 = 12 。

示例 3:

輸入:skill = [1,1,2,3]
輸出:-1
解釋:
無法將玩家分成每個團隊技能點都相等的若干個 2 人團隊。

分析問題:

思路1:

????????這里可以先根據數組的長度來獲得平均和key值,然后對skill數組進行一個排序,那么如果想等于key值的話,只能讓最大值+最小值,如果有一個不符合題意則直接return -1。將符合題意的兩個值的乘積全部加起來,最后return 就是結果。思路很簡單。但是時間復雜度相比之下略高。

思路2:

????????首先計算出所有技能值的總和以及每個團隊理想的技能值總和。然后通過遍歷技能值及其出現次數,判斷能否將技能值兩兩分組,使得每組的技能值總和都等于理想值,同時計算出所有分組產生的化學效能總和。如果在過程中出現無法滿足分組條件的情況,就返回 -1 ,否則返回計算得到的化學效能總和。


代碼實現:

思路1代碼實現:
class Solution:def dividePlayers(self, skill: List[int]) -> int:skill.sort()ans, s = 0, skill[0] + skill[-1]for i in range(len(skill) // 2):x, y = skill[i], skill[-1 - i]if x + y != s: return -1ans += x * yreturn ans


??

思路2代碼實現:?
class Solution:def dividePlayers(self, skill: List[int]) -> int:# 計算所有技能值的總和s = sum(skill)# 計算團隊數量(因為要兩兩分組,所以團隊數量是技能值個數的一半)n = len(skill) // 2# 如果總和不能被團隊數量整除,說明無法平均分配,返回 -1if s % n:return -1# 計算每個團隊的理想技能值總和t = s // n# 初始化最終的化學效能總和為 0ans = 0# 使用 Counter 統計每個技能值出現的次數cnt = Counter(skill)# 遍歷統計得到的技能值for k in list(cnt.keys()):# 如果當前技能值 k 與理想值 t - k 相等if k == t - k:# 如果該技能值的出現次數為奇數,無法兩兩配對,返回 -1if cnt[k] % 2:return -1# 計算該技能值兩兩配對產生的化學效能,并累加到總和中ans += k*k*cnt[k]//2else:# 如果當前技能值 k 和 t - k 的出現次數相等if cnt[k] == cnt[t - k]:# 計算它們配對產生的化學效能,并累加到總和中ans += k*(t - k)*cnt[k]# 將這兩個技能值的出現次數置為 0,表示已經處理完cnt[k] = cnt[t - k] = 0else:# 如果出現次數不相等,無法滿足兩兩配對的條件,返回 -1return -1# 返回最終的化學效能總和return ans


?

總結:

?????????兩種方法,思路1較容易想出來但是復雜度略高。思路2相比于思路1可能沒那么容易想出來,但是復雜度還是很優的。下面對思路2進行代碼詳解:

思路2代碼詳解:

????????首先,通過計算技能值的總和以及團隊數量,來判斷是否能夠平均分配技能值。如果不能整除,說明無法實現平均分組,直接返回?-1?。

????????然后,創建一個計數器?cnt?來統計每個技能值出現的次數。

????????接下來,遍歷所有的技能值。對于每個技能值?k?,分兩種情況處理:

  1. 如果?k?與理想差值?t - k?相等,需要檢查其出現次數是否為偶數,因為只有偶數次才能兩兩配對。如果是偶數次,計算?k?兩兩配對產生的化學效能并累加到結果中。
  2. 如果?k?與理想差值?t - k?不相等,那么需要檢查?k?和?t - k?的出現次數是否相等,如果相等則計算它們配對產生的化學效能,否則說明無法滿足兩兩配對的條件,直接返回?-1?。

????????最后,如果整個遍歷過程都沒有出現無法配對的情況,就返回計算得到的化學效能總和。

考點

  1. 數學計算,如求和、整除判斷。
  2. 數據結構?Counter?的使用。
  3. 條件判斷和邏輯處理。

收獲

  1. 學習如何有效地處理整數列表的分組問題,包括總和計算、平均分配判斷等。
  2. 掌握使用?Counter?來高效統計元素出現次數的方法。
  3. 提升通過遍歷和條件判斷來解決復雜邏輯問題的能力。
  4. 了解如何在代碼中確保數據滿足特定條件,不滿足時進行錯誤處理返回特定值。

“無聊的并不是時間,而是平庸無奇的我。”——《櫻花莊的寵物女孩》

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

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

相關文章

【深海王國】小學生都能玩的單片機?零基礎入門單片機Arduino帶你打開嵌入式的大門!(9)

Hi?(?o?)?, 各位深海王國的同志們,早上下午晚上凌晨好呀~辛勤工作的你今天也辛苦啦 (o゜▽゜)o☆ 今天大都督繼續為大家帶來系列——小學生都能玩的單片機!帶你一周內快速走進嵌入式的大門,let’s go! (9&#x…

殷山:摩斯大模型隱私保護技術和應用探索

背景介紹 6月20日下午,“2024信通院數據智能大會”圓滿落幕,摩斯技術負責人殷山在論壇上分享了摩斯在大模型隱私保護技術和行業應用的探索。 殷山發表“大模型隱私保護”主題演講 摩斯技術負責人殷山在“數據智能安全主題論壇“上,帶來“大…

web學習筆記(六十八)項目總結

目錄 1.如何取到對象的第一項的鍵名 2.如何在鍵名不確定的情況下取到對象的第一項的值 3.如何獲取對象的長度 4.計算屬性和watch監聽監聽深層數據 5.樣式穿透 1.如何取到對象的第一項的鍵名 可以通過Object.keys將對象轉化為一個包含對象所有可枚舉屬性名的數組&#xff…

Java中的微服務架構實現方法

Java中的微服務架構實現方法 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿! 在當今軟件開發的環境中,微服務架構已經成為了構建大型應用程序的主流…

NIVision-LabVIEW在灰度圖上畫圓

問題來源 在csdn上看到的這樣一個問題,好像也沒個正經答案,都用chatGPT回答,挺沒勁的。不說提供個vi源代碼,至少也來張截圖嘛。我想著問題也不難,就自己動動手吧。 代碼展示1 1、首先使用imaq ArrayToImage.vi創建了一…

java error ConcurrentModificationException 并發修改異常

ConcurrentModificationException 概述 這個異常在 Java 中通常發生在以下場景:當某個線程在遍歷一個集合(如 ArrayList、HashMap 等)的過程中,另一個線程嘗試修改這個集合的結構(如添加、刪除元素)&#…

java中處理RunTimeException類的方式

在Java中,RuntimeException是所有運行時異常的父類。一些常見的RuntimeException子類包括: NullPointerException(空指針異常):當試圖訪問空對象的屬性或調用空對象的方法時拋出。IllegalArgumentException&#xff0…

sheng的學習筆記-AI-學習向量量化

AI目錄 sheng的學習筆記-AI目錄-CSDN博客 需要學習前置知識:聚類,可參考 sheng的學習筆記-AI-聚類(Clustering)-CSDN博客 什么是學習向量量化 “學習向量量化”(Learning Vector Quantization,簡稱LVQ)是試圖找到一…

【Android面試八股文】ViewHolder為什么要被聲明成靜態內部類?

文章目錄 ViewHolder為什么要被聲明成靜態內部類?1. 避免隱式引用導致的內存泄漏2. 提高性能3. 代碼可讀性和維護性實例代碼總結ViewHolder為什么要被聲明成靜態內部類? 將 ViewHolder 聲明為靜態內部類有幾個重要的原因,這樣做可以提高性能并避免潛在的內存泄漏。下面是詳…

Qt | 子類化 QStyle(Qt自帶圖標大全)

01、簡介 1、把繪制自定義部件外觀的步驟大致分為三大板塊,如下: ①、樣式元素:即指定需要繪制的圖形元素(比如焦點框、按鈕,工具欄等)。樣式元素使 用 QStyle 類中的一系列枚舉(共有 11 個枚舉)進行描述。 ②、樣式選項:包含了需要繪制的圖形元素的所有信息,比如包含…

Tomcat 下載部署到 idea

一、下載Tomcat Tomcat 是Apache 軟件基金會(Apache Software Foundation)下的一個核心項目,免費開源、并支持Servlet 和JSP 規范。屬于輕量級應用服務器,在中小型系統和并發訪問用戶不是很多的場合下被普遍使用,是開發…

啟動VMWare虛擬機報錯

1. 無法打開內核設備“\\.\VMCIDev\VMX”: 操作成功完成。是否在安裝 VMware Workstation 后重新引導? 模塊“DevicePowerOn”啟動失敗。 未能啟動虛擬機。 解決辦法: 解決辦法: 將 Ubuntu 64 位.vmx 找到vmci0.present"TRUE"這行改成 vmci0.present "FAL…

wireshark工具獲取設備IP地址

背景: 一個網口抓包工具,主要是升級XX設備時候不知道網口的ip地址。每次需要一個一個試,比較麻煩。 使用步驟: 1、連接好XX設備與筆記本,在網絡連接里面找到以太網,沒有出現紅色X號,表示網線連…

文心一言 VS 訊飛星火 VS chatgpt (289)-- 算法導論21.3 2題

二、寫出使用路徑壓縮的 FIND-SET 過程的非遞歸版本。如果要寫代碼,請用go語言。 文心一言: 在并查集(Union-Find)數據結構中,路徑壓縮(Path Compression)是一種優化技術,用于減少…

智能倉儲:立體倉WCS設計

自動化立體倉庫簡稱高架倉庫,是采用高層貨架存放貨物,以巷道堆垛起重機為主,結合入庫出庫周邊設備來進行作業的一種倉庫。 立體倉主體由貨架、巷道式堆垛機、輸送機等組成。 電氣控制系統、上位監控系統(Warehouse Control Syste…

【前后端實現】AHP權重計算

AHP權重計算: 需求:前端記錄矩陣維度、上三角值,后端構建比較矩陣、計算權重值并將結果返回給前端 比較矩陣構建 如果你想要根據上三角(不包括對角線)的值來構建對稱矩陣,那么你可以稍作修改上述的generate…

.NET 語言特定指南

.NET Language-Specific Guide 本指南將教您如何使用 Docker 創建容器化的 .NET 應用程序。通過本指南,您將學習如何: 容器化并運行 .NET 應用程序設置本地環境以使用容器開發 .NET 應用程序使用容器運行 .NET 應用程序測試使用 GitHub Actions 配置容…

量化交易面臨的難題

量化交易面臨的難題 1、監管機構對于算法交易、量化交易的監管越來越嚴格3、回測場景于實盤交易場景的不匹配性4、策略并非100%有效,并非100%的收益5、股票、基本面、市場新聞之間的關系時刻在變化并且難以捉摸6、很難使用一套通用的交易規則去匹配所有的股票/市場/…

U盤數據恢復實戰:兩大方案助您找回珍貴數據

在數字化時代,U盤作為我們隨身攜帶的數據存儲工具,承載著無數重要的文件和信息。然而,由于誤操作、系統崩潰或硬件故障等原因,U盤中的數據可能會突然消失,給我們帶來極大的困擾。本文將深入探討U盤數據恢復的概念、方法…

常見大功率藍牙應用有哪些?

在無線通信技術飛速發展的今天,藍牙技術以其低功耗和易用性優勢成為短距離無線通信的佼佼者。然而,隨著智能家居、工業4.0等新型應用的興起,藍牙應用設備對通信距離和穩定性的要求越來越高。為了滿足更大范圍的無線通信需求,大功率…