热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

leetcode每日一题1664生成平衡数组的方案数(中等,动态规划)

时间长不做动态规划的题目,现在突然看过去有些生疏,第一眼看到这个题目想了一下暴力,然后突然注意到了题目的难度是中等,力扣里面


时间长不做动态规划的题目,现在突然看过去有些生疏,第一眼看到这个题目想了一下暴力,然后突然注意到了题目的难度是中等,力扣里面的中等难度的题目都是没有暴力可以做出来的,目前我做这么多题来看的话,第一眼我只用了一个数组来看,发现很麻烦,必须对i的值进行偶数奇数的判断,进行两次结果分析,非常的麻烦,索性我就用了两个数组来进行存储,空间浪费了,但是目的很明确,思路也简单了很多,消去任意一个位置的数组其实就是将当前位置的后续部分的奇偶性进行了调换,所以我们只需要将整个数组的奇偶性存入四个数组分别是,正序奇偶,和反序奇偶,对于最后的关系进行判断,然后对第一个数字和最后一个数字进行单独判断即可,时间有点浪费了,但是思路很明确



给你一个整数数组 nums 。你需要选择 恰好 一个下标(下标从 0 开始)并删除对应的元素。请注意剩下元素的下标可能会因为删除操作而发生改变。

比方说,如果 nums = [6,1,7,4,1] ,那么:

选择删除下标 1 ,剩下的数组为 nums = [6,7,4,1] 。

选择删除下标 2 ,剩下的数组为 nums = [6,1,4,1] 。

选择删除下标 4 ,剩下的数组为 nums = [6,1,7,4] 。

如果一个数组满足奇数下标元素的和与偶数下标元素的和相等,该数组就是一个 平衡数组 。

请你返回删除操作后,剩下的数组 nums 是 平衡数组 的 方案数 。



示例 1:

输入:nums = [2,1,6,4]

输出:1

解释:

删除下标 0 :[1,6,4] -> 偶数元素下标为:1 + 4 = 5 。奇数元素下标为:6 。不平衡。

删除下标 1 :[2,6,4] -> 偶数元素下标为:2 + 4 = 6 。奇数元素下标为:6 。平衡。

删除下标 2 :[2,1,4] -> 偶数元素下标为:2 + 4 = 6 。奇数元素下标为:1 。不平衡。

删除下标 3 :[2,1,6] -> 偶数元素下标为:2 + 6 = 8 。奇数元素下标为:1 。不平衡。

只有一种让剩余数组成为平衡数组的方案。

示例 2:

输入:nums = [1,1,1]

输出:3

解释:你可以删除任意元素,剩余数组都是平衡数组。

示例 3:

输入:nums = [1,2,3]

输出:0

解释:不管删除哪个元素,剩下数组都不是平衡数组。



提示:

1 <&#61; nums.length <&#61; 105

1 <&#61; nums[i] <&#61; 104

int waysToMakeFair(int* nums, int numsSize){
if(numsSize&#61;&#61;1)
{
return 1;
}
int sum0&#61;0,sum1&#61;0,sum&#61;0,i,j,flag&#61;0,x0,x1;
int dp[numsSize][2],x[numsSize][2]; //0奇数1偶数
memset(dp,0,sizeof(dp));
memset(x,0,sizeof(x));
for(i&#61;0;i {
if(i%2&#61;&#61;0){
sum0&#43;&#61;nums[i];
}else{
sum1&#43;&#61;nums[i];
}
x[i][0]&#61;sum0;
x[i][1]&#61;sum1;
}
dp[0][0]&#61;sum0;
dp[0][1]&#61;sum1;
x0&#61;sum0;
x1&#61;sum1;
sum&#61;sum1&#43;sum0;
sum0-&#61;nums[0];
for(i&#61;1;i {
if(i%2&#61;&#61;0){
dp[i][0]&#61;sum0;
sum0-&#61;nums[i];
dp[i][1]&#61;sum1;
}else{
dp[i][1]&#61;sum1;
sum1-&#61;nums[i];
dp[i][0]&#61;sum0;
}
}
int p,q;
for(i&#61;1;i {
if((sum-nums[i])%2&#61;&#61;0)
{
p&#61;dp[i&#43;1][0]&#43;x[i-1][1];
q&#61;dp[i&#43;1][1]&#43;x[i-1][0];
printf("i&#61;%d p&#61;%d q&#61;%d\n",i,p,q);
if(p&#61;&#61;q)
{
printf("i&#61;%d\n",i);
flag&#43;&#43;;
}
}
}
if(dp[1][0]&#61;&#61;dp[1][1])
{
flag&#43;&#43;;
}
if(numsSize%2&#61;&#61;1)
{
x0-&#61;nums[numsSize-1];
}else{
x1-&#61;nums[numsSize-1];
}
if(x0&#61;&#61;x1)
{
flag&#43;&#43;;
}
return flag;
}











推荐阅读
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 判断数组是否全为0_连续子数组的最大和的解题思路及代码方法一_动态规划
    本文介绍了判断数组是否全为0以及求解连续子数组的最大和的解题思路及代码方法一,即动态规划。通过动态规划的方法,可以找出连续子数组的最大和,具体思路是尽量选择正数的部分,遇到负数则不选择进去,遇到正数则保留并继续考察。本文给出了状态定义和状态转移方程,并提供了具体的代码实现。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • LeetCode笔记:剑指Offer 41. 数据流中的中位数(Java、堆、优先队列、知识点)
    本文介绍了LeetCode剑指Offer 41题的解题思路和代码实现,主要涉及了Java中的优先队列和堆排序的知识点。优先队列是Queue接口的实现,可以对其中的元素进行排序,采用小顶堆的方式进行排序。本文还介绍了Java中queue的offer、poll、add、remove、element、peek等方法的区别和用法。 ... [详细]
  • 给定一个二维平面上的一些点,通过计算曼哈顿距离,求连接所有点的最小总费用。只有任意两点之间有且仅有一条简单路径时,才认为所有点都已连接。给出了几个示例并给出了对应的输出。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • 多维数组的使用
    本文介绍了多维数组的概念和使用方法,以及二维数组的特点和操作方式。同时还介绍了如何获取数组的长度。 ... [详细]
author-avatar
淘气111006
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有