隨想錄 Day45 1049. 最后一塊石頭的重量 II 494. 目標和 474.一和零

隨想錄 Day45 1049. 最后一塊石頭的重量 II 494. 目標和 474.一和零

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

題目鏈接

有一堆石頭,用整數數組 stones 表示。其中 stones[i] 表示第 i 塊石頭的重量。

每一回合,從中選出任意兩塊石頭,然后將它們一起粉碎。假設石頭的重量分別為 x 和 y,且 x <= y。那么粉碎的可能結果如下:

如果 x == y,那么兩塊石頭都會被完全粉碎;
如果 x != y,那么重量為 x 的石頭將會完全粉碎,而重量為 y 的石頭新重量為 y-x。
最后,最多只會剩下一塊 石頭。返回此石頭 最小的可能重量 。如果沒有石頭剩下,就返回 0。

第一次提交

轉化為已經熟悉的背包問題

class Solution {
public:int lastStoneWeightII(vector<int>& stones) {int all = accumulate(stones.begin(), stones.end(), 0);int half = all / 2;vector<int> dp(half + 1, 0);for (int i = 0; i < stones.size(); i++) {for (int j = half; j >= 0; j --) {if (stones[i] <= j) {dp[j] = max(dp[j], dp[j - stones[i]] + stones[i]);}}}return all - 2* dp[half];}
};

學習題解

隨想錄 思路相似

494. 目標和

題目鏈接 494 給你一個非負整數數組 nums 和一個整數 target 。

向數組中的每個整數前添加 ‘+’ 或 ‘-’ ,然后串聯起所有整數,可以構造一個 表達式 :

例如,nums = [2, 1] ,可以在 2 之前添加 ‘+’ ,在 1 之前添加 ‘-’ ,然后串聯起來得到表達式 “+2-1” 。
返回可以通過上述方法構造的、運算結果等于 target 的不同 表達式 的數目。

提示:

1 <= nums.length <= 20

0 <= nums[i] <= 1000

0 <= sum(nums[i]) <= 1000

-1000 <= target <= 1000

第一次提交

直覺直接上回溯+記憶化搜索

class Solution {
public:int res;int his[21][40001];int backtrack(vector<int>& nums, int cur, int target) {//cout << cur <<" cur " <<target<< " target "<<endl;if (target == 0 && cur == nums.size()) {his[cur][target + 20000] = 1;return 1;}if (cur == nums.size()) {return 0;}if (his[cur][target + 20000] == 0) {his[cur][target + 20000] = backtrack(nums, cur+1, target + nums[cur]) + backtrack(nums, cur+1, target - nums[cur]);}return his[cur][target + 20000];}int findTargetSumWays(vector<int>& nums, int target) {res = 0;memset(his, 0, sizeof(his));return backtrack(nums, 0, target);        }
};

學習題解,轉化為背包問題

如何轉化為01背包問題呢。

假設加法的總和為x,那么減法對應的總和就是sum - x。

所以我們要求的是 x - (sum - x) = target

x = (target + sum) / 2

此時問題就轉化為,裝滿容量為x的背包,有幾種方法。

這里的x,就是bagSize,也就是我們后面要求的背包容量。


class Solution {
public:int findTargetSumWays(vector<int>& nums, int target) {int total = accumulate(nums.begin(), nums.end(), 0);if (abs(target) > total) return false;if ((target + total) % 2 == 1) return 0;int bagSize = (target + total) / 2;int dp[bagSize + 1];memset(dp, 0, sizeof(dp));dp[0] = 1;for(int i = 0; i < nums.size(); i++) {for (int j = bagSize; j >= 0; j--) {if (nums[i] <= j) {dp[j] = dp[j] + dp[j - nums[i]];}}}return dp[bagSize];}
};

474.一和零

題目鏈接 474 給你一個二進制字符串數組 strs 和兩個整數 m 和 n 。

請你找出并返回 strs 的最大子集的長度,該子集中 最多 有 m 個 0 和 n 個 1 。

如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。

第一次提交

延用背包問題解決思路

class Solution {
public:vector<int> transform(string str) {vector<int> res(2, 0);for(char c: str) {if (c == '0') res[0]++;if (c == '1') res[1]++;}return res;}int findMaxForm(vector<string>& strs, int m, int n) {int dp[m+1][n+1];memset(dp, 0, sizeof(dp));vector<vector<int>> cnt;for(int i = 0; i < strs.size(); i++) {cnt.push_back(transform(strs[i]));}for (int i = 0; i < cnt.size(); i++) {for ( int j = m; j >= 0; j--) {for(int k  = n; k >= 0; k--) {if (cnt[i][0] <= j && cnt[i][1] <= k) {dp[j][k] = max(dp[j][k], dp[j -cnt[i][0]][k - cnt[i][1]] + 1);}}}}return dp[m][n];}
};

學習題解

隨想錄 思路上沒區別

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

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

相關文章

帶你學習Mybatis之Mybatis全局配置文件

Mybatis全局配置文件 <?xml version"1.0" encoding"UTF-8"?><configuration> <!-- 配置 --> <properties/> <!-- 屬性 --> <settings/> <!-- 設置 --> <typeAliases/> <!-- 類型別名 -->…

車載以太網的未來:OPEN Alliance下17個技術委員會的最新進展與行業影響(下)

從上篇介紹來看&#xff0c;TC1-TC8大多數處于暫停或完成狀態。而TC9-TC17在2023年都有不同程度的進展&#xff0c;讓我們繼續探索藏在其中的車載以太網的發展和挑戰。 TC9 Automotive Ethernet Channel & Components&#xff08;in progress&#xff09; TC9的目標是為通…

[初始計算機]——計算機網絡的基本概念和發展史及OSI參考模型

&#x1f3e1;作者主頁&#xff1a;點擊&#xff01; &#x1f916;網絡通信基礎TCP/IP專欄&#xff1a;點擊&#xff01; ??創作時間&#xff1a;2024年5月30日11點59分 &#x1f004;?文章質量&#xff1a;96分 ? 目錄 &#x1f310;計算機網絡概述 &#x1f4af;…

opencv是什么?它有什么功能和特性?它值不值得我們去學習?我們該如何去學習呢?

1.opencv是什么&#xff1f; OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一個開源的計算機視覺庫&#xff0c;旨在提供一系列豐富的圖像處理和計算機視覺算法&#xff0c;以及用于構建實時圖像處理和機器視覺應用程序的開發工具。它最初由英特爾開發…

使用QT可視化操作信號與槽函數詳解

新書上架~&#x1f447;全國包郵奧~ python實用小工具開發教程http://pythontoolsteach.com/3 歡迎關注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目錄 一、引言 二、QT信號與槽機制概述 三、實際操作步驟 四、案例演示 五、總結 一、引言 在…

中國養生保健元宇宙-探索養生保健新領域

在全球化和科技迅速發展的今天&#xff0c;元宇宙作為一種全新的互聯網應用和社會形態&#xff0c;正逐步滲透到人們生活的各個方面。特別是在養生保健領域&#xff0c;中國的元宇宙概念正在引領一場革命&#xff0c;將古老的養生智慧與現代科技完美融合&#xff0c;為人們打造…

單片機建立自己的庫文件(1)

文章目錄 前言一、代碼模塊化是什么&#xff1f;二、使用步驟1.以LCD1602作為例子2.將LCD1602 相關的代碼抽取到另外一個文件中 三、調用LCD1602.h1.新建一個工程項目&#xff0c;將LCD1602.h添加到工程中2.在主函數上加入 #include <LCD1602.h> 總結 前言 提示&#xf…

進口鋁合金電動隔膜泵

進口鋁合金電動隔膜泵是一種高效、可靠的工業泵&#xff0c;其特點、性能與應用廣泛&#xff0c;以下是對其的詳細分析&#xff1a; 特點 材質與結構&#xff1a; 采用鋁合金材料制造&#xff0c;具有良好的耐腐蝕性和輕量化特點。鋁合金材質使得泵體結構緊湊、輕便&#xff…

svg實現一個圓形以及方形的環形進度條

1. svg實現圓形進度條 效果圖&#xff1a; 1. 寫個假接口&#xff1a; let res {curLegendList: [{ progress: "87", name: "進度1",color:"#00fe41" },{ progress: "66", name: "進度2" ,color:"orange"},{ p…

gitlab服務器遷移(親測有效)

描述&#xff1a;最近公司遷移gitlab&#xff0c;我沒有遷移過&#xff0c;經過網上查找資料最終完成遷移&#xff0c;途中也遇到挺多坑和兩個問題&#xff0c;希望能幫到你。 新服務器安裝gitlab 注意&#xff1a;新服務器gitlab版本也需要和舊版本一致。 首先查看原Gitlab…

基于Python實現地震數據可視化的設計與實現

基于Python實現地震數據可視化的設計與實現 “Design and Implementation of Earthquake Data Visualization using Python” 完整下載鏈接:基于Python實現地震數據可視化的設計與實現 文章目錄 基于Python實現地震數據可視化的設計與實現摘要第一章 引言1.1 研究背景1.2 研究…

RabbitMQ(三)SpringBoot整合,可靠性投遞,死信隊列,延遲隊列,消費端限流,消息超時

文章目錄 整合Springboot概述消費者生產者 消息可靠性投遞故障原因解決方案生產者端消息確認機制&#xff08;故障情況1&#xff09;故障情況2解決方案故障情況3解決方案 消費端限流概念 消息超時概念隊列層面&#xff1a;配置隊列過期消息本身&#xff1a;配置消息過期 死信隊…

C++中的虛函數和純虛函數

目錄 摘要 虛函數&#xff08;Virtual Functions&#xff09; 定義 用法 純虛函數&#xff08;Pure Virtual Functions&#xff09; 定義 用法 需要避開的坑 總結 摘要 在C中&#xff0c;我們經常會在開發中使用到虛函數&#xff08;Virtual Functions&#xff09;和…

如何有效屏蔽手機上的騷擾電話20240530

如何有效屏蔽手機上的騷擾電話 引言 最近&#xff0c;我的手機經常接到954開頭的7位數字座機電話&#xff0c;這些騷擾電話讓我非常困擾。由于我經常點外賣&#xff0c;無法屏蔽所有陌生號碼&#xff0c;因此需要一個既能屏蔽特定前綴的騷擾電話&#xff0c;又不影響日常生活…

英偉達(NVIDIA)H100性能及應用場景

英偉達H100是一款性能強大的GPU芯片&#xff0c;其關鍵性能參數和應用領域可以歸納如下&#xff1a; 一、性能參數 架構&#xff1a;H100采用了新一代的Hopper架構&#xff0c;擁有高達1.8萬億次/秒的張量處理能力和高達840 TFLOPS的FP8張量性能。CUDA核心數&#xff1a;H100…

STM32學習和實踐筆記(33):待機喚醒實驗

1.STM32待機模式介紹 很多單片機具有低功耗模式&#xff0c;比如MSP430、STM8L等&#xff0c;我們的STM32也不例外。默認情況下&#xff0c;系統復位或上電復位后&#xff0c;微控制器進入運行模式。在運行模式下&#xff0c;HCLK 為CPU提供時鐘&#xff0c;并執行程序代碼。這…

kafka學習筆記06

Kafka數據存儲流程和log日志講解 講解分布式應用核心CAP知識 Kafka數據可靠性保證原理之副本機制Replica介紹《上》 Kafka數據可靠性保證原理之副本機制Replica介紹《下》 Kafka數據可靠性保證原理之ISR機制講解 Kafka的HighWatermark的作用你知道多少

暑期來臨,AI智能視頻分析方案筑牢防溺水安全屏障

隨著夏季暑期的來臨&#xff0c;未成年人溺水事故頻發。傳統的防溺水方式往往依賴于人工巡邏和警示標識的設置&#xff0c;但這種方式存在人力不足、反應速度慢等局限性。近年來&#xff0c;隨著視頻監控智能分析技術的不斷發展&#xff0c;其在夏季防溺水中的應用也日益凸顯出…

ubuntu22 搭建nginx高可用集群(VIP(keepalived) + 負載均衡)

#在所有節點安裝nginx #ps: 如果要使用tcp流轉發&#xff1a;需用二進制包安裝 make編譯時加入stream流的參數。 推薦直接安裝openresty【默認支持stream等nginx模塊&#xff0c;還附帶了很多常用的lua庫】 apt install -y net-tools sudo apt install -y nginx vim /etc/…

恒創科技:無法與服務器建立安全連接怎么解決?

在使用互聯網服務時&#xff0c;有時會出現無法與服務器建立安全連接的問題&#xff0c;此錯誤消息通常出現在嘗試訪問需要安全連接的網站(例如使用 HTTPS 的網站)時&#xff0c;這可能是由于多種原因造成的&#xff0c;以下是一些常見的解決方法&#xff0c;幫助你解決問題。 …