代码随想录算法训练营第四十二天 | 1049.最后一块石头的重量II、494.目标和、474.一和零

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

题目链接:https://leetcode.cn/problems/last-stone-weight-ii/
文档讲解:https://programmercarl.com/1049.%E6%9C%80%E5%90%8E%E4%B8%80%E5%9D%97%E7%9F%B3%E5%A4%B4%E7…
视频讲解:https://www.bilibili.com/video/BV14M411C7oV/

思路

  • 确定dp数组以及下标的含义:装满容量为j的背包的最大重量(价值)为dp[j]
  • 确定递推公式:`dp[j] = Math.max(dp[j], dp[j - stones[i]] + stones[i]);``.
  • dp数组如何初始化:初始为0。
  • 确定遍历顺序:先正序遍历物品,再倒序遍历背包。
  • 打印dp数组,用于debug

代码

class Solution {public int lastStoneWeightII(int[] stones) {int sum = Arrays.stream(stones).sum();int target = sum / 2;int[] dp = new int[1501]; // 最多有30块石头,每块石头重量为100,那么最多重3000,取一半为1500for (int i = 0; i < stones.length; i++) {for (int j = target; j >= stones[i]; j--) {dp[j] = Math.max(dp[j], dp[j - stones[i]] + stones[i]);}}return sum - 2 * dp[target];}
}

分析:时间复杂度:O(n2),空间复杂度:O(n)。

494.目标和

题目链接:https://leetcode.cn/problems/target-sum/
文档讲解:https://programmercarl.com/0494.%E7%9B%AE%E6%A0%87%E5%92%8C.html
视频讲解:https://www.bilibili.com/video/BV1o8411j73x/

思路

  • 确定dp数组以及下标的含义:能组成值为j的组合有dp[j]种。
  • 确定递推公式:令left为正数和,right为负数和。
    • left + right = sum
    • left - right = target
    • right = left - target
    • left = (sum + target) / 2
    • 所以要求的组合数就是有多少种正数能组成left的值
    • dp[j] += dp[j - nums[i]];
  • dp数组如何初始化:dp[0] = 1
  • 确定遍历顺序:先正序遍历物品,再倒序遍历背包
  • 打印dp数组,用于debug

代码

class Solution {public int findTargetSumWays(int[] nums, int target) {int sum = Arrays.stream(nums).sum();int left = (sum + target) / 2;if ((sum + target) % 2 == 1) return 0; // 如果sum + target除不尽,没有方案if (Math.abs(target) > sum) return 0; //如果target的绝对值大于sum,没有方案int[] dp = new int[left + 1];dp[0] = 1;for (int i = 0; i < nums.length; i++) {for (int j = left; j >= nums[i]; j--) {dp[j] += dp[j - nums[i]];}}return dp[left];}
}

分析:时间复杂度:O(n2),空间复杂度:O(n)。

474.一和零

题目链接:https://leetcode.cn/problems/ones-and-zeroes/
文档讲解:https://programmercarl.com/0474.%E4%B8%80%E5%92%8C%E9%9B%B6.html
视频讲解:https://www.bilibili.com/video/BV1rW4y1x7ZQ/

思路

  • 确定dp数组以及下标的含义:装满i个0,j个1的背包中最多有dp[i][j]个物品。
  • 确定递推公式:dp[j][k] = Math.max(dp[j][k], dp[j - weightZero[i]][k - weightOne[i]] + 1);因为是求物品数量,所以是加一。
  • dp数组如何初始化:初始化为0。
  • 确定遍历顺序:先正序遍历物品,再倒序遍历二维背包。
  • 打印dp数组,用于debug

代码

class Solution {public int findMaxForm(String[] strs, int m, int n) {int[] weightZero = new int[strs.length];int[] weightOne = new int[strs.length];int[][] dp = new int[m + 1][n + 1];for (int i = 0; i < strs.length; i++) {for (int j = 0; j < strs[i].length(); j++) {if (strs[i].charAt(j) == '1') weightOne[i]++;else weightZero[i]++;}}for (int i = 0; i < strs.length; i++) {for (int j = m; j >= weightZero[i]; j--) {for (int k = n; k >= weightOne[i]; k--) {dp[j][k] = Math.max(dp[j][k], dp[j - weightZero[i]][k - weightOne[i]] + 1);}}}return dp[m][n];}
}

分析:时间复杂度:O(kmn),空间复杂度:O(mn)。k为字符串数组strs的长度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/29668.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聊聊系统架构之负载均衡优化实践

一、写在前面 最近在进行线上监控检查时&#xff0c;我遇到了两个超出预期的案例。首先&#xff0c;网关层的监控数据与应用实际监控数据存在不一致性&#xff0c;尤其是max有较大的差异&#xff0c;详见如下图。其次在某个应用中&#xff0c;通过httpclient请求某域名时发现只…

碳课堂 | 手把手教你申报CBAM

CBAM全称为 Carbon Border Adjustment Mechanism&#xff0c;也被称作“碳关税”或“碳边境调节机制”&#xff0c;是指在实施国内严格气候政策的基础上&#xff0c;要求进口或出口的高碳产品缴纳或退还相应的税费或碳配额。目前&#xff0c;由于欧盟碳边境调节机制是全球第一个…

2244. 完成所有任务需要的最少轮数

2244. 完成所有任务需要的最少轮数 题目链接&#xff1a;2244. 完成所有任务需要的最少轮数 代码如下&#xff1a; class Solution { public:int minimumRounds(vector<int>& tasks) {unordered_map<int,int> um;for(int i0;i<tasks.size();i)//统计各个…

数据结构——顺序表的实现

数据结构——顺序表的实现 一 关于顺序表的简单知识二 动态顺序表 一 关于顺序表的简单知识 1.顺序表的底层结构是数组&#xff0c;在数组的基础上增加了增&#xff0c;删&#xff0c;查&#xff0c;改等方法。 2.顺序表的分类&#xff1a;静态顺序表和动态顺序表 静态顺序表的…

Leaflet地图实例

ReactTypeScript实例&#xff1a; import React, { useEffect, useRef } from "react"; import * as L from "leaflet"; import "leaflet/dist/leaflet.css";const App: React.FC () > {const mapRef useRef<HTMLDivElement>(null);…

【调试笔记-20240611-Linux-配置 OpenWrt-23.05 支持泛域名 acme 更新】

调试笔记-系列文章目录 调试笔记-20240611-Linux-配置 OpenWrt-23.05 支持泛域名 acme 更新 文章目录 调试笔记-系列文章目录调试笔记-20240611-Linux-配置 OpenWrt-23.05 支持泛域名 acme 更新 前言一、调试环境操作系统&#xff1a;Windows 10 专业版调试环境调试目标 二、调…

Android ViewModel实现和原理

ViewModel实现和原理 前言1. 使用1.1 gradle准备1.2 模拟场景1.3. LiveData和ViewModel1.4 更新数据 2. 原理与源码解读2.1 添加观察者2.2 setValue2.3 post 参考资料 前言 ViewModel的主要基于观察者的设计模式&#xff0c;他主要分为两个部分&#xff1a; 提供者Provider&a…

【React】极客园--01.项目前置准备

项目搭建 基于CRA创建项目 CRA是一个底层基于webpack快速创建React项目的脚手架工具 # 使用npx创建项目 npx create-react-app react-jike# 进入到项 cd react-jike# 启动项目 npm start调整项目目录结构 -src-apis 项目接口函数-assets 项目资源文件&…

CSS【实战】抽屉动画

效果预览 技术要点 实现思路 元素固定布局&#xff08;fixed&#xff09;在窗口最右侧外部js 定时器改变元素的 right 属性&#xff0c;控制元素移入&#xff0c;移出 过渡动画 transition transition: 过渡的属性 过渡的持续时间 过渡时间函数 延迟时间此处改变的是 right …

笔记-前端

URL 输入到渲染的过程 域名解析&#xff0c;找到服务地址 构建 TCP 连接&#xff0c;若有 https&#xff0c;则多一层 TLS 握手&#xff0c; 特殊响应码处理 301 302 解析文档 构建 dom 树和 csscom 生成渲染树&#xff1a;从DOM树的根节点开始遍历每个可见节点&#xff0c;对于…

shell脚本之函数

一、1.函数&#xff1a;将命令序列按照固定的表达格式写在一起 2.函数作用&#xff1a;可以重复使用的命令序列&#xff0c;大的工程分割成若干个小块&#xff0c;依次执行&#xff0c;提高代码的可读性。 3.函数的两种格式 4.return作用&#xff1a;只能写在函数内部&#xff…

12306全球最大票务系统与Gemfire介绍

全球最大票务系统 自2019年12月12日发售春运首日车票&#xff0c;截至2020年1月9日&#xff0c;12306全渠道共发售车票4.12亿张&#xff0c;日均售票能力达到了2000万张&#xff0c;平均一年售出30亿张火车票&#xff0c;也就是说12306已经发展成全球交易量最大的实时票务系统…

26 红黑树

目录 1.概念 2.性质 3.节点定义 4.结构 5.插入 6.验证 7.删除 8.红黑树和avl树比较 9.应用 概念 是一种二叉搜索树&#xff0c;但在每个节点上增加一个存储位表示节点的颜色&#xff0c;可以是red或black。通过对任何一条从根到叶子的路径上各个节点着色方式的限制&#xff…

reverse-android-实战喜马拉雅-ollvm

资料 1. apk: com.ximalaya.ting.android.apk. 2020年8月 可以使用 2. 抓包分析 java层分析 so层分析 登录的算法so是在 liblogin_encrypt.so中。 32位的&#xff0c; 用 IDA打开&#xff0c;查看 静态的导出函数。 打开 一个 首先看到 IDA VIEW 是一个横向 比较多的分支&am…

2-9 基于matlab的传递矩阵计算轴的模态

基于matlab的传递矩阵计算轴的模态&#xff0c;包括模态频率和模态振型&#xff0c;可设置轴的结构参数。程序已调通&#xff0c;可直接运行。 2-9 传递矩阵计算轴的模态 模态频率 - 小红书 (xiaohongshu.com)

python-jupyter notebook安装教程

&#x1f308;所属专栏&#xff1a;【python】✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您的…

Jmeter 逻辑控制之IF条件控制器

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 测试环境 JMeter-5.4.1 循环控制器介绍 添加While Controller 右键线程组->添加->逻辑…

批量生产千万级数据 推送到kafka代码

1、批量规则生成代码 1、随机IP生成代码 2、指定时间范围内随机日期生成代码 3、随机中文名生成代码。 package com.wfg.flink.connector.utils;import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.util.ArrayList; impo…

个人关于Vue2组成的见解

前言 Vue.js 是一个用于构建用户界面的渐进式框架&#xff0c;它从核心逐渐扩展&#xff0c;提供了一套丰富的功能来构建复杂的单页应用。Vue 2 是该框架的第二个主要版本&#xff0c;引入了许多改进和新特性。 组成部分及解析 模板&#xff08;Template&#xff09; 模板是…

简易计算器需求报告

1. &#xff08;简易计算器&#xff09; 需求说明书 文件编号&#xff1a;2022[1] [木柚2] 06[3] [木柚4] 01[5] [木柚6] 完成日期&#xff1a;2024年 06月18日 编制&#xff1a; 易正阳 日期&#xff1a;2024年6月18日 审核&#xff1a;张正 日期&#xff1a;2024年6月18…