代码随想录算法训练营第四十三天

devtools/2024/9/19 19:35:52/ 标签: 算法, leetcode, 职场和发展

今日事争取今日毕!还一天就上班啦,陪产假结束,坚持坚持! 

1049. 最后一块石头的重量 II 

思路主要是分成两个差不多大的两堆,所以需要用尽可能一半去减另一半即可。思路很重要啊,第一次确实想不明白。

class Solution {
public:int lastStoneWeightII(vector<int>& stones) {int sum = 0;int target = 0;for(int i = 0;i < stones.size();i++){sum += stones[i];}target = sum/2;vector<int>dp(target + 1,0);for(int i = 0;i < stones.size();i++){for(int j = target;j >= stones[i];j--){dp[j] = max(dp[j],dp[j - stones[i]]+stones[i]);}}return sum - dp[target] - dp[target];}
};

 494. 目标和 

如何转化为01背包问题呢。

假设加法的总和为x,那么减法对应的总和就是sum - x。

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

x = (target + sum) / 2

理解上面的内容,才能转化成背包问题。

#include <cmath>
#include <iostream>
#include <vector>
using namespace ::std;
class Solution
{
public:int findTargetSumWays(vector<int> &nums, int target){int sum = 0;for (int i = 0; i < nums.size(); i++)sum += nums[i];if ((sum + target) % 2 == 1)return 0; // 和是奇数,肯定是没有正好合适的方案if (abs(target) > sum)return 0; // target过大,远超sum,肯定没有方案int bagSize = (target + sum) / 2;vector<vector<int>> dp(nums.size(), vector<int>(bagSize + 1, 0));// 初始化最上行(dp[0][j]),当nums[0] == j时(注意nums[0]和j都一定是大于等于零的,因此不需要判断等于-j时的情况),有唯一一种取法可取到j,dp[0][j]此时等于1// 其他情况dp[0][j] = 0if (nums[0] <= bagSize)dp[0][nums[0]] = 1;// 初始化最左列(dp[i][0])// 当从nums数组的索引0到i的部分有n个0时(n > 0),每个0可以取+/-,因此有2的n次方中可以取到j = 0的方案// n = 0说明当前遍历到的数组部分没有0全为正数,因此只有一种方案可以取到j = 0(就是所有数都不取)int numZeros = 0;for (int i = 0; i < nums.size(); i++){if (nums[i] == 0){numZeros++;}dp[i][0] = pow(2, numZeros);}for (int i = 1; i < nums.size(); i++){for (int j = 1; j < bagSize + 1; j++){if (j < nums[i])dp[i][j] = dp[i - 1][j];else{dp[i][j] = dp[i - 1][j] + dp[i - 1][j - nums[i]];}}}// for (int i = 0; i < nums.size(); i++)// {//     for (int j = 0; j < bagSize + 1; j++)//     {//         cout << " " << dp[i][j];//     }//     cout << endl;// }return dp[nums.size() - 1][bagSize];}
};
int main()
{Solution syz;vector<int> nums1;int xx[3] = {1, 2, 1};for (int i = 0; i < 3; i++){nums1.push_back(xx[i]);}syz.findTargetSumWays(nums1, 0);
}

这步在二维表里异常关键,相当于保证能把方法叠加起来。

        if (nums[0] <= bagSize)dp[0][nums[0]] = 1;

 一维表目前是理解随想录的思想,不过还没默写过。先摘抄下来

class Solution {
public:int findTargetSumWays(vector<int>& nums, int S) {int sum = 0;for (int i = 0; i < nums.size(); i++) sum += nums[i];if (abs(S) > sum) return 0; // 此时没有方案if ((S + sum) % 2 == 1) return 0; // 此时没有方案int bagSize = (S + sum) / 2;vector<int> dp(bagSize + 1, 0);dp[0] = 1;for (int i = 0; i < nums.size(); i++) {for (int j = bagSize; j >= nums[i]; j--) {dp[j] += dp[j - nums[i]];}}return dp[bagSize];}
};

 494. 目标和 

还是没有完成今天的工作,我歇一歇,明天继续。

没有深挖为什么一定是从后向前遍历,不过感觉和上一题相似,都是通过前面的内容为基础,加到后面的。

class Solution {
public:int findMaxForm(vector<string>& strs, int m, int n) {vector<vector<int>>dp(m+1,vector<int>(n+1,0));for(string str : strs){int ZeroNum = 0;int OneNum = 0;for(char c :str){if(c == '0')ZeroNum++;else OneNum++;}for(int i = m;i >= ZeroNum;i--){for(int j = n;j>= OneNum;j--){dp[i][j] = max(dp[i][j],dp[i - ZeroNum][j - OneNum] + 1);}}}return dp[m][n];}
};


http://www.ppmy.cn/devtools/34377.html

相关文章

Windows平台通过MobaXterm远程登录安装在VMware上的Linux系统(CentOS)

MobaXterm是一个功能强大的远程计算工具&#xff0c;它提供了一个综合的远程终端和图形化的X11服务器。MobaXterm旨在简化远程计算任务&#xff0c;提供了许多有用的功能&#xff0c;使远程访问和管理远程服务器变得更加方便&#xff0c;它提供了一个强大的终端模拟器&#xff…

【Python项目】基于opencv的的【疲劳检测系统】

技术简介&#xff1a;使用Python技术、OpenCV图像处理库、MYSQL数据库等实现。 系统简介&#xff1a;用户可以通过登录系统平台实现实时的人脸照片的拍摄和上传&#xff0c;结合上传图像的内容进行后台的图像预处理和运算分析&#xff0c;用户可以通过照片分析界面查看到当前检…

蓝桥杯练习系统(算法训练)ALGO-946 Q神的足球赛

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 足球赛上&#xff0c;只见Q神如闪电般的速度带球时而左&#xff0c;时而右&#xff0c;时而前&#xff0c;时而后&#xff…

数据库查询语言SQL介绍及基础命令[查看数据库/数据表,创建数据库/数据表,使用数据库/数据表,删除数据库/数据表,如何注释]

SQL介绍 SQL&#xff08;Structured Query Language&#xff09;是一种标准化的数据库查询语言&#xff0c;用于管理和操作关系数据库。SQL的主要作用包括数据查询、数据操作、数据定义和数据访问控制。它是与数据库交互的通用语言&#xff0c;被广泛应用于数据管理和分析。 …

Matlab|考虑极端天气线路脆弱性的配电网分布式电源和储能优化配置模型

1主要内容 程序主要参考《考虑极端天气线路脆弱性的配电网分布式电源配置优化模型-马宇帆》&#xff0c;针对极端天气严重威胁配电网安全稳定运行的问题。基于微气象、微地形对配电网的线路脆弱性进行分析&#xff0c;然后进行分布式电源接入位置与极端天气的关联性分析&#…

代码随想录算法训练营第四十五天| 卡码网57.爬楼梯、LeetCode322.零钱兑换、LeetCode279.完全平方数

卡码网 57 爬楼梯 题目链接&#xff1a;57. 爬楼梯&#xff08;第八期模拟笔试&#xff09; (kamacoder.com) 【解题思路】 1.确定dp数组下标及其含义&#xff1a; dp[j]表示爬到有j个台阶的楼顶&#xff0c;有dp[j]种方法 2.确定递推公式 dp[j]dp[j-i] i代表一步走i个台阶 …

macOS DOSBox 汇编环境搭建

正文 一、安装DOSBox 首先前往DOSBox的官网下载并安装最新版本的DOSBox。 二、下载必备的工具包 在用户目录下新建一个文件夹&#xff0c;比如 dosbox: mkdir dosbox然后下载一些常用的工具。下载好了后&#xff0c;将这些工具解压&#xff0c;重新放在 dosbox 这个文件夹…

【Python函数和类6/6】类与对象

目录 目标 类与对象 类的定义 栗子 实例化对象 属性和方法的调用 特殊的self参数 类方法的其它参数 函数与方法的区别 总结 目标 在前面的博客当中&#xff0c;我们已经接触了一部分封装。比如&#xff1a;将数据扔进列表中&#xff0c;这就是一个简单…

[论文阅读]Adversarial Autoencoders(aae)和代码

In this paper, we propose the “adversarial autoencoder” (AAE), which is a probabilistic autoencoder that uses the recently proposed generative adversarial networks (GAN) to perform variational inference by matching the aggregated posterior of the hidden …

React + 项目(从基础到实战) -- 第十期

目标 学会react 状态管理工具 使用redux管理用户状态 Context 跨层级传递,不像props层层传递类似于Vue的provide/inject用于:切换主题颜色,切换语言 useReducer useState 的替代方案 简化版的redux MobX 1. MobX 介绍 MobX 中文文档 声明式的修改数据 , 像vue state ac…

原创新作vue3+uni-app+pinia跨三端(H5+小程序+App端)聊天模板

uni-vue3-wchat&#xff1a;基于uni-appvue3piniauv-ui等技术搭建跨多终端(h5小程序APP)仿制微信app界面聊天模板。实现编辑框自适应高度消息/emoj混合、按住说话语音、图片/视频预览、红包/朋友圈等功能。 【APP版】uniappvue3跨端(h5小程序App端)聊天实例 flutter3-macos基于…

探索CSS3文本效果:打造魅力无限的网页排版

CSS3为网页设计带来了革命性的变化&#xff0c;特别是在文本效果方面&#xff0c;它赋予了开发者前所未有的创意空间。本文将带你深入了解CSS3中一些令人兴奋的文本效果&#xff0c;从基本的阴影处理到复杂的动画效果&#xff0c;每个技巧都将通过实际代码示例展现其魅力所在。…

Redis实际应用中的解决方案

Redis缓存使用问题 1数据一致性 分析一下几种方案&#xff1a; 1&#xff1a;先更新缓存&#xff0c;再更新数据库 2&#xff1a;先更新数据库&#xff0c;在更新缓存 3&#xff1a;先删除缓存&#xff0c;后更新数据库 4&#xff1a;想更新数据库&#xff0c;后删除缓存 …

【iOS】KVO

文章目录 前言一、KVO使用1.基本使用2.context使用3.移除KVO通知的必要性4.KVO观察可变数组 二、代码调试探索1.KVO对属性观察2.中间类3.中间类的方法3.dealloc中移除观察者后&#xff0c;isa指向是谁&#xff0c;以及中间类是否会销毁&#xff1f;总结 三、KVO本质GNUStep窥探…

修改JupyterNotebook文件存储位置

Jupyter Notebook 1、通过AnaConda安装Jupyter Notebok 2、在开始菜单里找到并打开Anaconda Prompt&#xff0c;输入如下命令&#xff0c;然后执行。 jupyter notebook --generate-config4、打开以下文件 找到 C:/Userzh/.../.jupyter 打开 jupyter_notebook_config.py 取消…

HTML与CSS

HTML语义化的重要性 HTML语义化指的是使用正确、有意义的HTML标签来标记网页内容&#xff0c;使得页面内容对搜索引擎和开发者都更易于理解和处理。HTML语义化的重要性主要体现在以下几个方面&#xff1a; 有利于搜索引擎优化&#xff08;SEO&#xff09;&#xff1a;搜索引擎…

MySQL学习

标题## 数据库三大范式 数据库三大范式是关系数据库设计中的一组规范&#xff0c;旨在提高数据结构的合理性、减少数据冗余和提高数据操作的效率。它们分别是&#xff1a; ● 第一范式&#xff08;1NF&#xff09;&#xff1a;确保每个数据列都是不可再分的原子值&#xff0c;…

Android by viewModels()

在Android中&#xff0c;您可以使用ViewModel来管理UI相关的数据&#xff0c;而不会在配置更改&#xff08;如旋转屏幕&#xff09;后丢失数据。by viewModels()是一个Kotlin扩展函数&#xff0c;它允许您以类型安全的方式从Fragment或Activity中获取ViewModel实例。 以下是如…

Python爬虫:XPath解析爬取豆瓣电影Top250示例

一、示例的函数说明&#xff1a; 函数processing()&#xff1a;用于处理字符串中的空白字符&#xff0c;并拼接字符串。 主函数程序入口&#xff1a;每页显示25部影片&#xff0c;实现循环&#xff0c;共10页。通过format方法替换切换的页码的url地址。然后调用实现爬虫程序的…

Node.js 版本升级方法

在构建vue项目时&#xff0c;依赖npm&#xff08;Node Package Manager&#xff09;工具&#xff0c;类似于Java项目需要maven管理。而npm是node.js的管理工具&#xff0c;npm依赖node.js环境才能执行。 有时候使用voscode或者其他工具安装vue项目依赖&#xff0c;显示一直处于…