首页 > Java > java教程 > 正文

LeetCode DayDynamic Programming Part 4

WBOY
发布: 2024-07-12 08:58:24
转载
497人浏览过

leetcode daydynamic programming part 4

494. 目标总和

给你一个整数数组 nums 和一个整数目标。

您想要通过在 nums 中的每个整数之前添加符号“+”和“-”之一来构建 nums 的表达式,然后连接所有整数。

例如,如果 nums = [2, 1],您可以在 2 之前添加一个“+”,在 1 之前添加一个“-”,并将它们连接起来构建表达式“+2-1”。
返回您可以构建的不同表达式的数量,其计算结果为目标。

示例1:

输入:nums = [1,1,1,1,1],目标 = 3
输出:5
说明:有 5 种分配符号的方法,使 nums 的总和为目标 3.
-1 + 1 + 1 + 1 + 1 = 3
+1 - 1 + 1 + 1 + 1 = 3
+1 + 1 - 1 + 1 + 1 = 3
+1 + 1 + 1 - 1 + 1 = 3
+1 + 1 + 1 + 1 - 1 = 3
示例2:

输入:nums = [1],目标 = 1
输出:1

限制:

1 0 0 -1000 原始页面

尽管回溯在这里很有用,我们可以使用动态规划来解决这个问题,以实现更低的时间复杂度。

    public int findTargetSumWays(int[] nums, int target) {
        /**
        sum(neg) + sum(pos) = sum(nums);
        sum(pos) - sum(neg) = target;
        sum(pos) = (sum(nums) + target) / 2 
         */
        int sum = Arrays.stream(nums).sum();
        // that means the sum of the positive number is invalid, because the nums do not conclude float
        if((sum+target)%2 != 0|| Math.abs(target) > sum){
            return 0;
        }

        // here we find the summary of the positive numbers
        int pos = (sum + target) >>1;

        // dp[i][j] array means for each index element `i` (nums[i]), if we want to reach the sum of the positive number `j`, we will have how many methods   
        int[][] dp = new int[nums.length+1][pos+1];

        // if we want to reach 0 we will have 1 ways that means we choose nothing and there is nothing.
        dp[0][0] = 1;

        // if(nums[0] <= pos){
        //     dp[0][nums[0]] = 1;
        // }

        for(int i = 1; i <= nums.length; i++){
            for(int j=0; j<=pos; j++){
                if(nums[i-1] > j){
                    dp[i][j] = dp[i-1][j];
                }else{
                    dp[i][j] = dp[i-1][j] + dp[i-1][j-nums[i-1]];
                }
            }
        }
        // Arrays.stream(dp).map(Arrays::toString).forEach(System.out::println);
        return dp[nums.length][pos];       

    }
登录后复制

笔记

1、初始化dp数组很重要尤其是这里重要的是要弄清楚0的含义

以上就是LeetCode DayDynamic Programming Part 4的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
相关标签:
来源:dev.to网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号