代碼隨想錄算法訓練營第三十六天|1049. 最后一塊石頭的重量 II 、 494. 目標和 、 474.一和零

1049. 最后一塊石頭的重量 II

分成兩堆石頭,一堆石頭的總重量是dp[target],另一堆就是sum - dp[target]。

在計算target的時候,target = sum / 2 因為是向下取整,所以sum - dp[target] 一定是大于等于dp[target]的

那么相撞之后剩下的最小石頭重量就是 (sum - dp[target]) - dp[target]

class Solution:def lastStoneWeightII(self, stones: List[int]) -> int:target = sum(stones) // 2dp = [0 for _ in range(target + 1)]for i in range(len(stones)):for j in range(target, stones[i]-1, -1):dp[j] = max(dp[j], dp[j-stones[i]] + stones[i])return sum(stones) - dp[-1] - dp[-1]

494. 目標和

本題要如何使表達式結果為target,既然為target,那么就一定有 left組合 - right組合 = target。

left + right = sum,而sum是固定的。right = sum - left公式來了, left - (sum - left) = target 推導出 left = (target + sum)/2 。target是固定的,sum是固定的,left就可以求出來。此時問題就是在集合nums中找出和為left的組合。

在求裝滿背包有幾種方法的情況下,遞推公式一般為:

dp[j] += dp[j - nums[i]];
class Solution:def findTargetSumWays(self, nums: List[int], target: int) -> int:#dp[j] 表示:填滿j(包括j)這么大容積的包,有dp[j]種方法total_sum = sum(nums)  # 計算nums的總和if abs(target) > total_sum:return 0  # 此時沒有方案#dp[j]:sum_target = j時有多少種不同的組合sum_target = (sum(nums) + target) // 2if (sum(nums) + target) %2 != 0:return 0dp = [0 for _ in range(sum_target+1)]dp[0] = 1 #sum_target為0時只有1中組合法,就是0for i in range(len(nums)):for j in range(sum_target, nums[i]-1, -1):dp[j] += dp[j-nums[i]]return dp[-1]

474. 一和零

這個背包有兩個維度,一個是m 一個是n,而不同長度的字符串就是不同大小的待裝物品。

  1. 確定dp數組(dp table)以及下標的含義

dp[i][j]:最多有i個0和j個1的strs的最大子集的大小為dp[i][j]

此題關鍵:背包是二維的!!但是先遍歷物品再遍歷背包的思想不變!

 class Solution:def findMaxForm(self, strs: List[str], m: int, n: int) -> int:dp = [[0 for _ in range(n + 1)] for _ in range(m + 1)]#遍歷物品:zeroNum = 0oneNum = 0for s in strs:zeroNum = s.count('0')oneNum = s.count('1')#遍歷背包(需要從后往前)for i in range(m, zeroNum - 1, -1):for j in range(n, oneNum - 1, -1):dp[i][j] = max(dp[i][j], dp[i-zeroNum][j-oneNum]+1)return dp[m][n]

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

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

相關文章

.NET C# 使用 iText 生成PDF

.NET C# 使用 iText 生成PDF 文章目錄 .NET C# 使用 iText 生成PDF1 安裝 iText 7 庫:2 變量定義3 創建一個PDF4 段落5 旋轉文本6 代碼塊7 外部鏈接8 內部鏈接9 表格10 注釋11 線條12 二維碼13 嵌入圖像14 列表15 設置背景16 頁眉17 頁腳18 事件19 水印20 分欄21 源…

老古董Lisp(1):粗魯先生Lisp再出發

粗魯先生Lisp再出發 開始的原因 目標和夢想是最近考慮的一個問題。什么是目標?什么是夢想?夢想可以激勵改變,目標才能實現改變。 開始這個部分的時候,我的夢想是什么?我的目標是什么?我想要什么&#xf…

libwebrtc.a+exosip連接fS 環境部署tips

//運行FS服務器 sudo ./freeswitch -nc -nonat //公網sudo ./freeswitch //運行客戶端 sudo ./fs_cli //加載模塊 load mod_av load mod_verto0.Invite交互過程 1.fs碼率設置 2.用戶密碼改動 3.數字簽名的摘要 4.FS收不到ACK 5.公網部署 6.查看frewswitch都占用哪些端口 7.日志…

Java(二十一)---棧的使用和模擬實現

文章目錄 前言1.什么是棧(Stack)?2. 棧的模擬實現3.stack的使用![在這里插入圖片描述](https://i-blog.csdnimg.cn/direct/80c82d22f3ee49cfaa2915d1c961573e.png)4.關于棧的oj題4.1.有效的括號4.2.逆波蘭表達式4.3.棧的壓入、彈出序列4.4.最小棧 前言 前面幾篇我們學習了順序…

Vue--Router(路由)

目錄 一 Router(路由) 1.作用 2.實現步驟 3.注意 一 Router(路由) 1.作用 Router又叫做路由,簡單來說,就是用來實現vue的頁面之間跳轉的。 我們都知道,使用vue必然會涉及到很多個組件,也就是頁面,而頁面之間肯定需…

RK3588讀取不到顯示器edid

問題描述 3588HDMIout接老的顯示器或者HDMI轉DVI接DVI顯示器顯示不了或者顯示內容是彩色條紋,但是這種顯示器測試過如果接筆記本或者主機是可以直接顯示的。這一類問題是HDMI下的i2c與顯示器通訊沒成功,讀取不到設備的edid。問題包括全志的H3 、AML的S905都有遇到 測試環境…

Qt-事件與信號

事件和信號的區別在于,事件通常是由窗口系統或應用程序產生的,信號則是Qt定義或用戶自定義的。Qt為界面組件定義的信號往往通常是對事件的封裝,如QPushButton的clicked()信號可以看做對QEvent::MouseButtonRelease類事件的封裝。 在使用界面組…

【QGroundControl二次開發】二.使用QT編譯QGC(Windows)

【QGroundControl二次開發】一.開發環境準備(Windows) 二. 使用QT編譯QGC(Windows) 2.1 打開QT Creator,選擇打開項目,打開之前下載的QGC項目源碼。 編譯器選擇Desktop Qt 6.6.3 MSVC2019 64bit。 點擊運…

vue3-tree-org實現帶照片的組織架構圖

官方文檔&#xff1a;vue3-tree-org 顯示照片需要注意的地方 使用步驟 下載 npm install vue3-tree-org --save 在main.js中引入 import "vue3-tree-org/lib/vue3-tree-org.css"; import vue3TreeOrg from vue3-tree-org;app.use(vue3TreeOrg) 實現代碼 <tem…

level 6 day2 網絡基礎2

1.socket&#xff08;三種套接字&#xff1a;認真看&#xff09; 套接字就是在這個應用空間和內核空間的一個接口&#xff0c;如下圖 原始套接字可以從應用層直接訪問到網絡層&#xff0c;跳過了傳輸層&#xff0c;比如在ubtan里面直接ping 一個ip地址,他沒有經過TCP或者UDP的數…

解決TypeError: __init__() takes 1 positional argument but 2 were given

問題描述&#xff1a; 如下圖&#xff0c;在使用torch.nn.Sigmoid非線性激活時報錯 源代碼&#xff1a; class testrelu(nn.Module):def __init__(self):super().__init__()self.sigmoid Sigmoid()def forward(self, input):output self.sigmoid(input)return outputwriter…

記錄貼-芋道源碼

環境搭建 文字講解 鏈接: 芋道源碼-環境搭建&#xff08;一&#xff09;后端 鏈接: 芋道源碼-環境搭建&#xff08;二&#xff09;前端 鏈接: 基于FastGPT和芋道源碼挑戰一句話生成代碼 視頻講解 鏈接: 芋道源碼零基礎啟動教程&#xff08;上&#xff09; 鏈接: 芋道源碼零基…

Blackbox AI:你的智能編程伙伴

目錄 Blackbox AI 產品介紹 Blackbox AI 產品使用教程 Blackbox AI體驗 AI問答 代碼驗證 實時搜索 探索&代理 拓展集成 總結 Blackbox AI 產品介紹 Blackbox是專門為程序員量身定制的語言大模型&#xff0c;它針對20多種編程語言進行了特別訓練和深度優化&#xff0c;在AI代…

React 從入門到實戰 一一開發環境基礎搭建(小白篇)

React 從入門到實戰一一開發環境基礎搭建&#xff08;小白篇&#xff09; React 介紹什么是 react &#xff1f;react 主要功能react 框架特點 開發工具渲染測試 React 介紹 最近兩年&#xff0c;react 也愈來愈火熱&#xff0c;想要在里面分一杯羹&#xff0c;那肯定逃不過 r…

UFS協議

1. 名詞解釋 UFS: universal flash storage SCSI&#xff1a;小型計算機系統接口 SPC&#xff1a;SCSI Primary Commands SBC&#xff1a; SCSI Block Commands Application Client&#xff1a;作為主機中SCSI命令和任務管理功能請求源的實體。 Device Server&#xff1a;設備…

高級java每日一道面試題-2024年7月17日(java內存模型-后期完善)

面試官: 你對java內存模型了解多少? 我回答: Java內存模型&#xff08;JMM&#xff0c;Java Memory Model&#xff09;是Java虛擬機&#xff08;JVM&#xff09;規范的一部分&#xff0c;它定義了線程之間的內存可見性和并發執行時的原子性、有序性和可見性等特性。理解JMM對…

Windows下使用Cygwin創建rsync服務端

1 下載Cygwin 訪問官網Cygwin&#xff0c;點擊setup-X86_64.exe即可開始下載 2 安裝 前面全部默認。路徑可以自己選擇&#xff0c;站點選阿里云的&#xff0c;等待安裝即可 3 配置 使用打開Cygwin安裝后創建的快捷方式窗口&#xff0c;輸入下面的指令將windows用戶導入到cyg…

C語言中常見庫函數(1)——字符函數和字符串函數

文章目錄 前言1.字符分類函數2.字符轉換函數3.strlen的使用和模擬實現4.strcpy的使用和模擬實現5.strcat的使用和模擬實現6.strncmp的使用和模擬實現7.strncpy函數的使用8.strncat函數的使用9.strncmp函數的使用10.strstr的使用和模擬實現11.strtok函數的使用12.strerror函數的…

物聯網平臺有哪些?

隨著科技的不斷進步&#xff0c;物聯網&#xff08;IoT&#xff09;已經成為我們生活中不可或缺的一部分。物聯網平臺作為連接設備、數據和應用的橋梁&#xff0c;扮演著至關重要的角色。本文將介紹一些主流的物聯網平臺&#xff0c;并特別關注ThingsKit物聯網平臺。 物聯網平…

UE4-系統默認天空球的使用

當我們在調整平行光的時候&#xff0c;會發現場景中的光照改變了&#xff0c;但是太陽的位置并沒有改變&#xff0c;此時就需要用到系統默認的天空球中的&#xff1a; 但是只有在選中是由平行光的改變而改變的情況下才會發生改變&#xff0c;如果沒有選擇或者選擇其他的光源&am…