416. 分割等和子集

416. 分割等和子集

原题链接:

416. 分割等和子集

https://leetcode.cn/problems/partition-equal-subset-sum/description/

完成情况:

解题思路:

该代码是一个解决问题的类,其中包含一个名为canPartition的方法,该方法接受一个整数数组nums作为参数,并返回一个布尔值。

在方法中,首先获取数组的长度n,如果n小于2,则直接返回false。然后计算数组中所有元素的和sum和最大值maxNum。

接着判断sum是否为偶数,如果不是则返回false。计算出目标值target为sum的一半,并判断最大值maxNum是否大于目标值,如果是则返回false。

创建一个二维数组dp,用于动态规划。初始化dp数组的第一列为true,表示可以通过选择前i个元素得到和为0。然后初始化dp数组的第一行,表示只选择第一个元素可以得到对应的和。

接着进行动态规划的计算,遍历数组元素和目标值,根据当前元素是否选择来更新dp数组。最终返回dp数组的最后一个元素是否为true。

这段代码的作用是判断给定数组是否可以分割成两个和相等的子集,如果可以则返回true,否则返回false。

参考代码:

_416分割等和子集

java 复制代码
package leetcode板块;

import java.util.Arrays;

public class _416分割等和子集 {
    /**
     *
     * @param nums
     * @return
     */
    public boolean canPartition(int[] nums) {
        //给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。
        //1.首先得是倍数 ,,2.排序,,,然后从左从右开始找
        //先去掉一些不可能满足条件的情况
        //数组初始化排序一下
        Arrays.sort(nums);
        int n = nums.length;
        if (n < 2){
            return false;
        }
        int sum = 0,maxNum = 0;
        for (int num : nums){
            sum += num;
            maxNum = Math.max(maxNum,num);
        }
        if (sum % 2 != 0)   return false;
        int target = sum /2;
        if (maxNum > target){
            return false;
        }
        //-------------排除掉一些不满足条件的情况---------------
        boolean [][] dp_canPartition = new boolean[n][target + 1];
        for (int i = 0;i < n;i++){
            dp_canPartition[i][0] = true;
        }
        dp_canPartition[0][nums[0]] = true;
        for (int i = 1; i < n;i++){
            int num = nums[i];
            for (int j = 1;j <= target;j++){
                if (j >= num){
                    dp_canPartition[i][j] = dp_canPartition[i-1][j] | dp_canPartition[i-1][j - num];
                }else {
                    dp_canPartition[i][j] = dp_canPartition[i-1][j];
                }
            }
        }
        return dp_canPartition[n-1][target];
    }
}

错误经验吸取

相关推荐
爱读源码的大都督13 分钟前
为什么有了HTTP,还需要gPRC?
java·后端·架构
Lucky_Turtle32 分钟前
【Java Xml】Apache Commons Digester3解析
xml·java·apache
小贾要学习44 分钟前
【数据结构】C++实现红黑树
数据结构·c++
聪明的笨猪猪1 小时前
Java Redis “缓存设计”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
FIavor.1 小时前
我发送给Apifox是http://localhost:9002/goods/getByUserName?name=张三 为什么会是500哪里错了?
java·服务器·网络协议·http
ID_180079054731 小时前
京东获取整站实时商品详情数据|商品标题|数据分析提取教程
java·开发语言
StarPrayers.1 小时前
旅行商问题(TSP)(2)(heuristics.py)(TSP 的两种贪心启发式算法实现)
前端·人工智能·python·算法·pycharm·启发式算法
微露清风2 小时前
系统性学习C++-第五讲-内存管理
java·c++·学习
计算机毕业设计木哥2 小时前
计算机毕业设计选题推荐:基于SpringBoot和Vue的快递物流仓库管理系统【源码+文档+调试】
java·vue.js·spring boot·后端·课程设计
爱吃橘的橘猫2 小时前
嵌入式系统与嵌入式 C 语言(2)
c语言·算法·嵌入式