算法每日一練 (18)

💢歡迎來到張翊塵的技術站
💥技術如江河,匯聚眾志成。代碼似星辰,照亮行征程。開源精神長,傳承永不忘。攜手共前行,未來更輝煌💥

文章目錄

  • 算法每日一練 (18)
    • 刪除并獲得點數
      • 題目描述
      • 解題思路
      • 解題代碼
        • `c/c++`
        • `golang`
        • `lua`

官方站點: 力扣 Leetcode

算法每日一練 (18)

刪除并獲得點數

題目地址:刪除并獲得點數

題目描述

給你一個整數數組 nums ,你可以對它進行一些操作。

每次操作中,選擇任意一個 nums[i] ,刪除它并獲得 nums[i] 的點數。之后,你必須刪除 所有 等于 nums[i] - 1nums[i] + 1 的元素。

開始你擁有 0 個點數。返回你能通過這些操作獲得的最大點數。

示例 1:

輸入:nums = [3,4,2]
輸出:6
解釋:
刪除 4 獲得 4 個點數,因此 3 也被刪除。
之后,刪除 2 獲得 2 個點數。總共獲得 6 個點數。

示例 2:

輸入:nums = [2,2,3,3,3,4]
輸出:9
解釋:
刪除 3 獲得 3 個點數,接著要刪除兩個 2 和 4 。
之后,再次刪除 3 獲得 3 個點數,再次刪除 3 獲得 3 個點數。
總共獲得 9 個點數。

提示:

  • 1 <= nums.length <= 2 * 104
  • 1 <= nums[i] <= 104

解題思路

  • 首先根據題意判斷邊界條件,當集合 nums 中元素數量為 1 時直接返回首個元素的值即可。

  • 然后獲取數組中的最大值,創建輔助數組 count 來統計每個數字的總點數。其中 count[i] 表示 i 數字出現的點數之和。

  • count 集合中的元素個數小于 3 個時,表示源數組中不相同的元素個數不超過 2 個,故直接返回 count[1] 即可。

  • 創建 dp 數組,初始化 dp[1]dp[2]

    • dp[1] = count[1]:因為 count[0] 永遠等于 0 所以直接取 count[1] 即可。
    • dp[2] = max(count[1], count[2]):因為 count[1]count[2] 只能選擇刪除其中一個,故選擇其中最大的一個。
  • 借助 for 循環從 3 開始到 maxVal,滿足如下狀態轉移方程:

    d p [ i ] = m a x ( d p [ i ? 1 ] , d p [ i ? 2 ] + c o u n t [ i ] ) dp[i] = max(dp[i - 1], dp[i - 2] + count[i]) dp[i]=max(dp[i?1],dp[i?2]+count[i])

    • 如果選擇刪除 i,則不能選擇刪除 i-1i+1,故 dp[i] 的值就是 dp[i-2] + count[i]
    • 如果不選擇刪除 i,則可以刪除 i-1,故 dp[i] 的值就是 dp[i-1]
    • 兩者取其中最大值就是 dp[i] 的狀態值。
  • 最終返回 dp[maxVal] 的值即可。

解題代碼

c/c++
#include <vector>class Solution
{
public:int deleteAndEarn(std::vector<int> &nums){int sz = nums.size();if (sz == 1)return nums[0];int maxVal = nums[0];for (int i = 1; i < sz; i++){if (nums[i] > maxVal)maxVal = nums[i];}std::vector<int> count(maxVal + 1, 0);for (auto &e : nums){count[e] += e;}if (count.size() < 3)return count[1];std::vector<int> dp(maxVal + 1, 0);dp[1] = count[1];dp[2] = std::max(count[1], count[2]);for (int i = 3; i <= maxVal; i++){dp[i] = std::max(dp[i - 1], dp[i - 2] + count[i]);}return dp[maxVal];}
};
golang
func deleteAndEarn(nums []int) int {sz := len(nums)if sz == 1 {return nums[0]}maxVal := nums[0]for i := 1; i < sz; i++ {if nums[i] > maxVal {maxVal = nums[i]}}count := make([]int, maxVal+1)for _, num := range nums {count[num] += num}if len(count) < 3 {return count[1]}dp := make([]int, maxVal+1)dp[1] = count[1]dp[2] = max(count[1], count[2])for i := 3; i <= maxVal; i++ {dp[i] = max(dp[i-1], dp[i-2]+count[i])}return dp[maxVal]
}
lua
local function deleteAndEarn(nums)local sz = #numsif sz == 1 thenreturn nums[1]endlocal maxVal = nums[1]for i = 2, sz doif nums[i] > maxVal thenmaxVal = nums[i]endendlocal count = {}for i = 1, maxVal docount[i] = 0endfor i, v in ipairs(nums) doif v == 0 thengoto continueelsecount[v] = count[v] + vend::continue::endif #count == 1 thenreturn count[1]endlocal dp = {}dp[1] = count[1]dp[2] = math.max(count[1], count[2])for i = 3, maxVal dodp[i] = math.max(dp[i - 1], dp[i - 2] + count[i])endreturn dp[maxVal]
end

🌺🌺🌺撒花!

如果本文對你有幫助,就點關注或者留個👍
如果您有任何技術問題或者需要更多其他的內容,請隨時向我提問。

在這里插入圖片描述

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

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

相關文章

VsCode啟用右括號自動跳過(自動重寫) - 自錄制gif演示

VsCode啟用右括號自動跳過(自動重寫) - 自錄制gif演示 前言 不知道大家在編程時候的按鍵習慣是怎樣的。輸入完左括號后編輯器一般會自動補全右括號&#xff0c;輸入完左括號的內容后&#xff0c;是按→跳過右括號還是按)跳過右括號呢&#xff1f; for (int i 0; i < a.s…

用Python和Stable Diffusion生成AI動畫:從圖像到視頻的全流程指南

引言 本文將演示如何通過Python代碼實現基于文本提示的AI動畫生成。我們將使用Stable Diffusion生成連貫圖像幀,結合OpenCV合成視頻,最終實現一個可自定義的動畫生成 pipeline。 一、環境準備 1. 依賴安裝 # 安裝核心庫 pip install diffusers transformers torch numpy …

【Git 常用指令速查表】

Git 常用指令速查表 Git 常用指令速查表目錄1. 初始化倉庫2. 提交代碼流程3. 分支管理4. 遠程倉庫操作5. 撤銷操作6. 查看狀態與日志7. 其他實用指令完整操作示例常用場景速查表 Git 常用指令速查表 目錄 初始化倉庫提交代碼流程分支管理遠程倉庫操作撤銷操作查看狀態與日志其…

分布式爬蟲框架Scrapy-Redis實戰指南

引言 在當今數字化的時代背景下&#xff0c;互聯網技術的蓬勃興起極大地改變了旅游酒店業的運營模式與市場格局。作為旅游產業鏈中的關鍵一環&#xff0c;酒店業的興衰與互聯網技術的應用程度緊密相連。分布式爬蟲技術&#xff0c;尤其是基于 Scrapy 框架的 Scrapy-Redis 擴展…

爬蟲:scrapy面試題大全(60個scrapy經典面試題和詳解)

更多內容請見: 爬蟲和逆向教程-專欄介紹和目錄 文章目錄 1. 什么是Scrapy?2. Scrapy 框架的組件及其作用?3. Scrapy的工作流程是什么?(運行機制)4. 如何創建一個Scrapy項目?5. 如何定義一個Spider?6. 如何在Scrapy中提取數據?7. Scrapy中的Item是什么?8. Scrapy中的P…

Leetcode12-整數轉羅馬數字

題目鏈接&#xff1a;12. 整數轉羅馬數字 - 力扣&#xff08;LeetCode&#xff09; 看題目限制輸入1 < num < 3999&#xff0c;就直接用暴力法寫了&#xff0c;還比較簡單 代碼&#xff1a; char* intToRoman(int num) {char *res (char*)malloc(100);int index 0;i…

WebMvcConfigurer 的 addResourceLocations

在 Spring Boot 的 addResourceLocations 方法中&#xff0c;file: 是一個 URL 前綴&#xff0c;用于指示資源的位置是本地文件系統路徑。以下是詳細解釋&#xff1a; 一、file: 的作用 file: 是 Java 中用于表示本地文件系統的 URL 前綴。它告訴 Spring Boot&#xff0c;資源…

Spring Boot響應壓縮配置與優化

一、核心工作機制 1.1 自動協商觸發條件 Spring Boot的響應壓縮功能基于智能協商機制&#xff0c;需同時滿足以下條件方可觸發&#xff1a; 客戶端支持&#xff1a;請求頭包含Accept-Encoding: gzip/deflate數據量閾值&#xff1a;響應體大小超過預設值&#xff08;默認2KB&…

JavaScript 改變 HTML 樣式

JavaScript 改變 HTML 樣式 JavaScript 改變 HTML 樣式的核心是通過操作 DOM 元素的 CSS 屬性或 類名 實現動態視覺效果。以下是具體方法與場景解析: 一、直接修改元素的 style 屬性 通過 DOM 元素的 style 屬性直接設置內聯樣式,優先級最高: // 修改單個樣式 document.…

【vue】vue + vant實現上傳圖片添加水印

目錄 方法1&#xff1a;使用HTML2canvas 說明&#xff1a; 優點 缺點 依賴安裝 方法2&#xff1a;使用canvas結合vant中組件 增加水印方法 在vue組件中使用 要點 方法1&#xff1a;使用HTML2canvas 使用html2canvas來處理水印的生成&#xff0c;需要就給水印元素轉換為…

【深度破解】爬蟲反反爬核心技術實踐:驗證碼識別與指紋偽裝

一、反爬技術體系全景圖 現代Web應用的常見反爬手段&#xff1a; mermaid&#xff1a; graph TDA[反爬體系] --> B[行為特征檢測]A --> C[驗證碼體系]A --> D[指紋追蹤]B --> B1[請求頻率]B --> B2[鼠標軌跡]B --> B3[頁面停留時間]C --> C1[圖形驗證碼…

deepseek(2)——deepseek 關鍵技術

1 Multi-Head Latent Attention (MLA) MLA的核心在于通過低秩聯合壓縮來減少注意力鍵&#xff08;keys&#xff09;和值&#xff08;values&#xff09;在推理過程中的緩存&#xff0c;從而提高推理效率&#xff1a; c t K V W D K V h t c_t^{KV} W^{DKV}h_t ctKV?WDKVht?…

OpenGL繪制文本

一&#xff1a;QPainter繪制 在 OpenGL 渲染的窗口中&#xff08;如 QOpenGLWidget&#xff09;&#xff0c;通過 QPainter 直接繪制文本。Qt 會自動將 2D 內容&#xff08;文本、圖形&#xff09;與 OpenGL 內容合成。在paintGL()里面繪制&#xff0c;如果有其他紋理&#xf…

從零構建大語言模型全棧開發指南:第二部分:模型架構設計與實現-2.1.3前饋網絡(FFN)與激活函數(GELU)優化

?? 點擊關注不迷路 ?? 點擊關注不迷路 ?? 點擊關注不迷路 文章大綱 2.1.3 前饋網絡(FFN)與激活函數(GELU)優化1. 前饋網絡(FFN)的架構設計與數學原理1.1 FFN在Transformer中的核心作用2. GELU激活函數的數學特性與優化2.1 GELU的數學形式與近似計算3. 逐行代碼實現…

React 中的錯誤邊界(Error Boundaries),如何使用它們捕獲組件錯誤

大白話React 中的錯誤邊界&#xff08;Error Boundaries&#xff09;&#xff0c;如何使用它們捕獲組件錯誤 在 React 里&#xff0c;錯誤邊界就像是一個“小衛士”&#xff0c;專門負責在組件出現錯誤時挺身而出&#xff0c;避免整個應用因為一個小錯誤就崩潰掉。接下來我會詳…

數據庫DBA認證,選哪個認證合適?

從 Oracle、MySQL 到 云數據庫&#xff0c;結合市場認可度、考試難度及職業回報&#xff0c;為你精選高性價比認證。 一、企業級數據庫認證&#xff08;傳統場景&#xff09; 1. Oracle認證 認證等級考試代碼核心內容費用適合人群OCA1Z0-082SQL基礎、數據庫安裝與配置$245零基…

力扣刷題-熱題100題-第24題(c++、python)

234. 回文鏈表 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/palindrome-linked-list/description/?envTypestudy-plan-v2&envIdtop-100-liked 常規法 數組是連續的存儲空間&#xff0c;可以根據索引到達任意位置&#xff0c;鏈表只能一個個的順…

調用通義千問實現語音合成并將合成的音頻通過揚聲器播放

1. 作者介紹 郭建東&#xff0c;男&#xff0c;西安工程大學電子信息學院&#xff0c;2024級研究生 研究方向&#xff1a;機器視覺與人工智能 電子郵件&#xff1a;1229963266qq.com 高金年&#xff0c;男&#xff0c;西安工程大學電子信息學院&#xff0c;2024級研究生&…

Ubuntu軟件包離線下載安裝

1、下載軟件包tcpd&#xff0c;并在/var/cache/apt/archives目錄中查看。 rooteducoder:~# apt-get install -d tcpd Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed:tcpd …

您的數據是如何出現在暗網上的?

暗網是互聯網上的一個隱秘角落&#xff0c;人們可以在那里保持匿名。暗網經常與深網混淆&#xff0c;但它們并不完全相同。 深網是指網絡上所有未被搜索引擎索引的內容。這包括電子郵件帳戶、私人數據庫和付費服務等。這并不違法&#xff0c;只是無法通過簡單的 Google 搜索找…