第八十五天-背包问题LeetCode494,Markdown

博主分享了自己成功早起的经历,虽然起初感到迷茫,但通过阅读理财书籍和观看电影找到了动力。文章介绍了Markdown的分隔线和删除线用法,并详细解析了一个关于构建不同目标和的整数数组表达式的问题,提供了有效的解题思路和代码实现。博主强调了踏实学习和坚持早睡的重要性,鼓励自己持续进步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天成功早起了,早上突然多了时间,一下子不知道该做什么,居然有点不知所措,看了一会儿理财的书籍,觉得有点困了,带着困意去上班了,也顺利坚持下来了一天。其实只是把晚上的时间移到了早上而已,睡眠时间和总的空余时间还是没有变的,但是给人的感知却好像多出来了时间。

今日进度:
1.早起了40分钟,虽然第一天有点迷茫,但是继续坚持下去,一定能找到想做的事情
2.看了一部电影,觉得与自己现在的处境很相似,只是电影的主人公发现自我之后很快达成了目标,放到现实生活中可能会花上许多年,实在是很漫长啊
3.但转念有想,至少现在有时间有条件可以做自己想做的事情,不也是很好的一个时期吗
4.决定踏踏实实地学完衍生课程在继续项目开放,不再囫囵吞枣了

学习笔记:
1.Markdown分隔线
你可以在一行中用三个以上的星号***、减号- - -、底线---------来建立一个分隔线,行内不能有其他东西。你也可以在星号或是减号中间插入空格。下面每种写法都可以建立分隔线:



2.Markdown删除线
如果段落上的文字要添加删除线,只需要在文字的两端加上两个波浪线 ~~ 即可
GOOGLE.COM
BAIDU.COM

3.494. 目标和
给你一个整数数组 nums 和一个整数 target 。
向数组中的每个整数前添加 ‘+’ 或 ‘-’ ,然后串联起所有整数,可以构造一个 表达式 :
例如,nums = [2, 1] ,可以在 2 之前添加 ‘+’ ,在 1 之前添加 ‘-’ ,然后串联起来得到表达式 “+2-1” 。返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。

输入:nums = [1,1,1,1,1], target = 3
输出:5
解释:一共有 5 种方法让最终目标和为 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

解题思路:假设数组nums里正整数的和为P,负整数的和为N,数组的元素和为S,则有P=S-N,(S-N)-N=target, 可以得出N=(S-target)/2,S-target必为非负偶数,这样可以把问题转换为从nums里选取元素,使它们的和等于(S-target)/2的组合个数。使用滚动数组dp[j]来存储当前行与上一行的值,表示从nums里选取i个元素,使得它们的和为j的组合个数。边界条件为dp[0]=1,即目标为0时有一种选法什么都不选,遍历完数组内的所有数组后得到的dp[neg]即为答案。

class Solution {
    public int findTargetSumWays(int[] nums, int target) {
        int sum = 0;
        for(int num : nums){
            sum += num;
        }
        if((sum-target)/2 < 0 || (sum-target)%2 !=0){
            return 0;
        }
        int neg = (sum-target)/2;
        int dp[] = new int[neg+1];
        dp[0] = 1;
        for(int i=0; i<nums.length; i++){
            for(int j=neg; j>=nums[i]; j--){
                dp[j] += dp[j-nums[i]];
            }    
        }
        return dp[neg];
    }
}

今天也要坚持早睡,明天继续加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿达斯加

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值