【Hot100】LeetCode—416. 分割等和子集

news2024/11/18 11:27:48

目录

  • 题目
  • 1- 思路
  • 2- 实现
    • ⭐152. 乘积最大子数组——题解思路
  • 3- ACM 实现


题目

  • 原题连接:416. 分割等和子集

1- 思路

理解为背包问题

  • 思路: 能否将均分的子集理解为一个背包,比如对于 [1,5,11,5],判断能否凑齐背包为 11 的容量
  • 在本题中,背包中的物品是不可以重用的

1.定义 dp 数组

  • dp[j] 代表容量为 j 的数组的最大价值,在本题中,容量就是价值。重量为 5 的石头,价值就是 5
  • 可划分条件dp[target] == target 也就是装满 target 的最大价值刚好是 target 这时候就可以划分

2.递推公式

  • dp[j] = Math.max(dp[j],dp[j-weight[i]]+values[i]) ——> 在本题目中 weightvalue 是一个东西

3.初始化


2- 实现

⭐152. 乘积最大子数组——题解思路

在这里插入图片描述

class Solution {
    public boolean canPartition(int[] nums) {
        // 求target
        int sum = 0;
        for(int s:nums){
            sum+=s;
        }
        //总和为奇数,不能平分
        if(sum % 2 != 0) return false;
        int target = sum / 2;

        // 1. 定义dp
        int[] dp = new int[target+1];

        // 2. 递推公式
        // dp[j] = Math.max(dp[j],dp[j-weight[i]]+value[i]);

        // 3.初始化,都为 0
        dp[0] = 0;

        // 4. 先遍历物品,后遍历背包(逆序)
        for(int i = 0 ;i < nums.length;i++){
            for(int j = target;j>=nums[i];j--){
                dp[j] = Math.max(dp[j],dp[j-nums[i]]+nums[i]);
                if(dp[j] == target){
                    return true;
                }
            }
        }
        return false;
    }
}

3- ACM 实现

public class splitNums {

    public static boolean splitNums(int[] nums){
        // 先求 target
        int len = nums.length;
        int sum = 0;
        for(int i:nums){
            sum+=i;
        }
        if(sum%2==1) return false;
        int target = sum/2;

        // 1. 定义 dp 数组
        int[] dp = new int[target+1];

        // 2. 递推公式
        // dp[j] = Math.max(dp[j],dp[j-weight[i]]+value[i]);
        dp[0] = 0;
        // 3.初始化
        // 4. 遍历顺序,先遍历物品后遍历背包
        for(int i = 0 ; i < nums.length;i++) {
            for (int j = target; j >= nums[i]; j--) {
                dp[j] = Math.max(dp[j], dp[j - nums[i]] + nums[i]);
                if (dp[j] == target) {
                    return true;
                }
            }
        }
        return false;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("输入数组长度");
        int n = sc.nextInt();
        int[] nums = new int[n];
        for(int i = 0 ; i < n ; i++){
            nums[i] = sc.nextInt();
        }
        System.out.println("结果是"+splitNums(nums));
    }
}

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

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

相关文章

【shell】shell循环的几种方式

Shell循环的方式 for循环 for 变量名 in 值列表 do命令1命令2... done值列表情形&#xff1a; 值铺开变量数组 值铺开 变量 数组 while循环 while 条件判断 do命令1命令2... done条件判断情形 计算比较读取文本 计算比较 读取文本 until循环 until 条件 do命令1命令2... …

Imagination 面向大学推出 RISC-V 课程

Imagination Technologies发布了针对本科教学的 RISC-V 计算机架构完整课程&#xff0c;帮助学生了解处理器架构的关键元素&#xff0c;包括知识产权 (IP) 内核、修改 RISC-V 内核及其微架构。 该课程名为“RVfpga&#xff1a;理解计算机架构”&#xff0c;包含教学材料和实践…

【C++指南】类和对象(下)

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法》 期待您的关注

论文阅读_字节的语音生成模型_Seed-TTS

英文名称: Seed-TTS: A Family of High-Quality Versatile Speech Generation Models 中文名称: Seed-TTS&#xff1a;高质量多功能语音生成模型系列 链接: http://arxiv.org/abs/2406.02430v1 代码: https://github.com/BytedanceSpeech/seed-tts-eval (评测工具) 演示网站&am…

shell-awk命令详解

目录 一.概述 二.工作原理 三.工作流程 1.运行模式 2.运行流程 四.基本语法 1.命令格式 2.常用变量  五.变量类型 1.内建变量 2.内置变量 3.BEGIN END运算  4.awk高级用法 5.awk if语句 6.BEGIN END循环 一.概述 AWK是一种处理文本文件的语言&#xff0c;是一…

深入分析 Android ContentProvider (六)

文章目录 深入分析 Android ContentProvider (六)ContentProvider 的性能优化和实践案例&#xff08;续&#xff09;1. 性能优化技巧&#xff08;续&#xff09;1.6. 使用批量插入优化性能示例&#xff1a;批量插入实现 1.7. 使用 Projections 优化查询示例&#xff1a;使用 Pr…

Webpack 从入门到精通

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 一、Webpack 简介 二、Webpack 的核心概念 三、Webpack 的安装与配置 安装 Node.js 安装 Webpack 初始…

【Linux C | 网络编程】进程池退出的实现详解(五)

上一篇中讲解了在进程池文件传输的过程如何实现零拷贝&#xff0c;具体的方法包括使用mmap&#xff0c;sendfile&#xff0c;splice等等。 【Linux C | 网络编程】进程池零拷贝传输的实现详解&#xff08;四&#xff09; 这篇内容主要讲解进程池如何退出。 1.进程池的简单退…

超越基础功能:项目进度管理工具深度评测

国内外主流的10款项目进度管理网站对比&#xff1a;PingCode、Worktile、滴答清单&#xff08;TickTick&#xff09;、Todoist、NarTick、Teambition、Monday.com、Asana、ClickUp、Trello。 在选择合适的项目进度管理工具时&#xff0c;许多项目经理面临着如何找到既能满足团队…

二十二、作业

目录 1.求代码结果 2.求代码结果 3.使用指针打印数组内容 4.字符串逆序 5.计算求和 6.打印水仙花数 7.打印菱形 8.喝汽水问题 1.求代码结果 输出为00345 2.求代码结果 任何一个变量/表达式&#xff0c;都有2个属性&#xff0c;值属性和类型属性 int a 3&#xff1b;…

Python及Jupyter-Notebook安装

来源&#xff1a; “码农不会写诗”公众号 链接&#xff1a;Python及Jupyter-Notebook安装 文章目录 01 Python安装1.1 下载安装包1.2 双击安装包&#xff0c;开始安装1.3 选择安装配置1.4 选择需要安装的Optional Feature&#xff0c;点击Next1.5 选择需要安装的Advanced Feat…

matplotlib的科研绘图辅助

matplotlib的科研绘图辅助 趁着暑假&#xff0c;与和鲸科技合作了一个python绘图的教程&#xff0c;作为暑期夏令营的一小部分&#xff0c;主要内容是介绍如何使用matplotlib、pandas、seaborn和plotnine进行医学科研绘图&#xff0c;感兴趣的可以通过如下地址进行访问&#x…

Unity XR Interaction Toolkit设置或监听手柄按键事件(三)

提示&#xff1a;文章有错误的地方&#xff0c;还望诸位大神不吝指教&#xff01; 文章目录 前言一、XRI Default Input Actions1.导入官方案例2.设置控制器绑定&#xff0c;如手柄、主/辅助按钮、操纵杆等1.要设置控制器绑定&#xff0c;如左右手 手柄、主/辅助按钮、操纵杆等…

添加sidecar容器并输出日志

添加一个sidecar容器(使用busybox 镜像)到已有的pod 11-factor-app中,确保sidecar容器能够输出/var/log/11-factor-app.log的信息,使用volume挂载/var/log目录,确保sidecar能访问11-factor-app.log 文件 # 准备工作 创建一个 pod 11-factor-appapiVersion: v1 kind: Pod metada…

【研路导航】保研英语面试高分攻略,助你一路过关斩将

面试攻略之 千锤百炼英语口语 写在前面 在保研面试中&#xff0c;英语口语往往是让许多同学感到头疼的一部分。如何在面试中展现出自信和流利的英语表达能力&#xff0c;是我们今天要探讨的主题。以下是一些有效的英语口语练习方法和常见题型解析&#xff0c;帮助你在保研面试…

GUI - Tkinter - MVC

【python】 property属性详解_python property-CSDN博客Tkinter MVC (pythontutorial.net)GUI架构演进之MVC&#xff08;一&#xff09; - frydsh - 博客园 (cnblogs.com)MVC 模式 | 菜鸟教程 (runoob.com)MVC 架构详解 (freecodecamp.org)Python之MVC - chenbiao - SegmentFau…

灵活数据流处理:NeuronEX 支持 JavaScript 自定义函数

随着数据要素逐渐成为帮助工业企业提升智能化水平的重要助力&#xff0c;如何灵活采集和处理工业数据&#xff0c;并满足用户定制化的数据需求&#xff0c;成为企业数字化建设的焦点之一。 NeuronEX 是一款专为工业场景设计的边缘网关软件&#xff0c;具备工业设备数据采集、工…

@JSONField(format = “yyyyMMddHH“)的作用和使用

JySellerItqrdDataDO对象中的字段为&#xff1a; private Date crdat; 2.数据库中的相应字段为&#xff1a; crdat datetime DEFAULT NULL COMMENT 创建时间,2. 打印出的结果为&#xff1a; “crdat”:“2024072718” 年月日时分秒 3. 可以调整format的格式 4. 这样就把Date类…

信息搜集——小米

小米 主域名&#xff1a;www.miui.com 备案网站&#xff1a;27个 备案APP&#xff1a;21个 备案小程序&#xff1a;13个 备案公众号&#xff1a;23个 备案微博&#xff1a;43个 IP 域名 端口 状态码 Ping 网址 多地ping 网站名称 网址 域名 网站备案/许可证号 公 司名…

手撕数据结构---------顺序表和链表

1.线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中⼴泛使 ⽤的数据结构&#xff0c;常⻅的线性表&#xff1a;顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构&#xff0c;也就说是连续的⼀条直…