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

news2024/11/19 20:25:35

时间长不做动态规划的题目,现在突然看过去有些生疏,第一眼看到这个题目想了一下暴力,然后突然注意到了题目的难度是中等,力扣里面的中等难度的题目都是没有暴力可以做出来的,目前我做这么多题来看的话,第一眼我只用了一个数组来看,发现很麻烦,必须对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 <= nums.length <= 105
1 <= nums[i] <= 104
int waysToMakeFair(int* nums, int numsSize){
    if(numsSize==1)
    {
        return 1;
    }
    int sum0=0,sum1=0,sum=0,i,j,flag=0,x0,x1;
    int dp[numsSize][2],x[numsSize][2];            //0奇数1偶数
    memset(dp,0,sizeof(dp));
    memset(x,0,sizeof(x));
    for(i=0;i<numsSize;i++)
    {
        if(i%2==0){
            sum0+=nums[i];
        }else{
            sum1+=nums[i];
        }
        x[i][0]=sum0;
        x[i][1]=sum1;
    }
    dp[0][0]=sum0;
    dp[0][1]=sum1;
    x0=sum0;
    x1=sum1;
    sum=sum1+sum0;
    sum0-=nums[0];
    for(i=1;i<numsSize;i++)
    {
        if(i%2==0){
            dp[i][0]=sum0;
            sum0-=nums[i];
            dp[i][1]=sum1;
        }else{
            dp[i][1]=sum1;
            sum1-=nums[i];
            dp[i][0]=sum0;
        }
    }
    int p,q;
    for(i=1;i<numsSize-1;i++)
    {
        if((sum-nums[i])%2==0)
        {
            p=dp[i+1][0]+x[i-1][1];
            q=dp[i+1][1]+x[i-1][0];
            printf("i=%d p=%d q=%d\n",i,p,q);
            if(p==q)
            {
                printf("i=%d\n",i);
                flag++;
            }
        }
    }
    if(dp[1][0]==dp[1][1])
    {
        flag++;
    }
    if(numsSize%2==1)
    {
        x0-=nums[numsSize-1];
    }else{
        x1-=nums[numsSize-1];
    }
    if(x0==x1)
    {
        flag++;
    }
    return flag;
}

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

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

相关文章

StarRocks荣获开源中国“2022 年度优秀开源技术团队”

近日&#xff0c;国内知名开源技术社区开源中国&#xff08;OSCHINA&#xff09;&#xff0c;综合了平台上各大认证官方技术团队、开源社区账号年度发表的内容频率及质量、开展各种活动运营积极性等多方面表现&#xff0c;向StarRocks颁发了 OSCHINA“2022年度优秀开源技术团队…

编译原理学习笔记19——语义分析和中间代码生成4

编译原理学习笔记19——语义分析和中间代码生成419.1 常用的控制语句19.2 控制语句的属性文法19.3 控制语句的属性计算19.4 一遍扫描翻译控制语句19.5 一遍扫描翻译控制语句示例19.1 常用的控制语句 常用的控制语句 S → if E then S1S → if E then S1 else S2S → while E …

机器学习笔记之生成对抗网络(二)全局最优解的求解逻辑

机器学习笔记之生成对抗网络——全局最优解的求解逻辑引言回顾&#xff1a;生成对抗网络的判别过程关于生成对抗网络的一些特性最优解的求解过程引言 上一节介绍了生成对抗网络&#xff0c;并介绍了其判别过程&#xff0c;本节将介绍关于模型参数的求解逻辑。 回顾&#xff1…

建立建筑领域科学的碳排放核算方法(江亿)

中国工程院院士、清华大学江亿教授受邀参加2022年12月28日“2022中国建筑节能协会年会暨第五届全国建筑节能与绿色建筑技术创新大会”并作了题为“建立建筑领域科学的碳排放核算方法”的报告。 实现能源转型&#xff0c;由碳基能源转为零碳能源&#xff0c;是中央确定的未来战…

九龙证券|锂离子电池在安全性能上应当满足哪些条件?

锂离子电池具有分量轻、容量大、无回忆效应等优势&#xff0c;因而得到了普遍运用——今朝的许多数码设备都采用了锂离子电池作电源&#xff0c;虽然其价格相对来说比较昂贵。锂离子电池的能量密度很高&#xff0c;它的容量是同分量的镍氢电池的1.5~2倍&#xff0c;而且具有很低…

Redis集群搭建

Redis集群搭建1.单机安装Redis2.Redis主从集群2.1.集群结构2.2.准备实例和配置2.3.启动2.4.开启主从关系2.5.测试3.搭建哨兵集群3.1.集群结构3.2.准备实例和配置3.3.启动3.4.测试4.搭建分片集群4.1.集群结构4.2.准备实例和配置4.3.启动4.4.创建集群4.5.测试基于CentOS7下的Redi…

数据库session分析表

目录 Active Session 活动会话 gv$active_session_history 每秒采集一次 dba_hist_active_sess_history 每10秒采集一次 背景 说明&#xff1a; 常用sql 直接使用V$ACTIVE_SESSION_HISTORY的sql 与其他表和视图共同查询…

神经网络数学原理与编码逻辑(一) 无隐层模型

概述 几年前就想写这篇文章&#xff0c;但是要上班应付各种工作内容&#xff0c;在解析神经网络的理论问题上也是断断续续&#xff0c;加上个人能力有限&#xff0c;很多问题并没有研究的很明白&#xff0c;以及神经网络本身高维问题的复杂性&#xff0c;导致这个问题的理解也…

OAuth2代码流程演示

目录 一&#xff0c;创建项目 二&#xff0c;项目结构 一&#xff0c;创建项目 新建项目时&#xff0c;如果换了工作区间我们一定要记得改maven地址&#xff0c;不然下载插件时不仅占用C盘内存&#xff0c;还会下载的很慢。 导入项目 导入新项目后就会下载新的插件&#xf…

消息队列简介

提高系统性能首先考虑的是数据库的优化&#xff0c;之前一篇文章《数据库的使用你可能忽略了这些》中有提到过开发中&#xff0c;针对数据库需要注意的事项。但是数据库因为历史原因&#xff0c;横向扩展是一件非常复杂的工程&#xff0c;所有我们一般会尽量把流量都挡在数据库…

Unity可用 运行时语音合成(文本转语音)插件 RT-Voice PRO

Unity语音合成文本转语音插件 RT-Voice PRO前言一、导入RT-Voice PRO插件二、使用步骤1.先看自带例子&#xff08;01-Speech&#xff09;2.自行配置总结前言 提示&#xff1a;这个插件在Unity Asset Store 卖 78美刀,确实买不起啊。 &#x1f602; AssetStore下载链接 文章最后…

复试数据结构篇[第5章-第6章]

文章目录第五章 数组和广义表1-数组定义2-数组的顺序表示3-矩阵的压缩存储&#xff08;1&#xff09;对称矩阵和三角矩阵&#xff08;2&#xff09;对角矩阵&#xff08;3&#xff09;稀疏矩阵&#xff08;3&#xff09;十字链表4-广义表的定义串、数组、广义表小结第六章 树与…

JVM的类加载

什么是类加载&#xff1f;java程序运行前&#xff0c;要经过编译即.java>.class文件。运行的时候java进程(JVM)就会读取对应的.class文件&#xff0c;并解析内容&#xff0c;在内存中构造出类对象并进行初始化&#xff08;类对象就是描述这个类有哪些属性&#xff0c;哪些方…

基于卡尔曼滤波器的PID控制-3

基于卡尔曼滤波器的PID控制系统结构如图1所示。图1 基于卡尔曼滤波器的PID控制被控对象为二阶传递函数&#xff1a;离散化结果与“基于卡尔曼滤波器的PID控制-1”的仿真实例相同。采样时间为1ms。控制干扰信号w(k)和测量噪声信号v(k)幅值均为0.002的白噪声信号&#xff0c;输入…

Python中最全的窗口操作,如窗口最大化、最小化、窗口置顶、获取缩放比例等

Python窗口操作 前言 本文记录在Python中操作Windows应用窗口的操作。 这里的操作都是自己摸索借助强大的搜索引擎整理出来的&#xff0c;我真棒&#xff01;&#xff01;&#xff01; 知识点&#x1f4d6;&#x1f4d6; 名称解释名称ctypes****ctypesPython的外部函数库。它…

高阶导数——“高等数学”

各位CSDN的uu们你们好呀&#xff0c;今天&#xff0c;小雅兰的内容是高阶导数&#xff0c;在这之前&#xff0c;我们学习了导数的概念和函数的求导法则&#xff0c;那么今天&#xff0c;就让我们一起进入高阶导数的世界吧 一、高阶导数的定义 二、高阶导数的计算 1.直接法 2.间…

儿童护眼台灯如何选择?2023年儿童护眼台灯推荐

随着科技不断发展&#xff0c;生活方式的改变&#xff0c;各类的电子产品的使用&#xff0c;加上不注意保护视力、过度用眼等&#xff0c;我国儿童青少年的近视率出现上升趋势&#xff0c;为了保护孩子们的健康&#xff0c;护眼台灯受到许多家庭的青睐&#xff0c;那么儿童的护…

[个人备忘]go包管理

版本 1.18创作目的: 之前想要在go的项目里引用另一个自己写的项目, 然后被折磨半天,乃至弃坑1,创建项目我们创建目录gogogo,下面有两个项目: 分别创建main.goutils/main.gopackage utils import "fmt" // 大写才能被外部访问 func Log(){fmt.Print("go mod is s…

Postman 实现备份数据 Postman恢复数据 postman 导出导入数据 postman 导入导出数据

Postman 实现备份数据 Postman恢复数据 postman 导出导入数据 postman 导入导出数据 一、需求描述 在使用postman调试接口时&#xff0c;若遇到内网的环境&#xff0c;无法通过账户同步数据&#xff1b; 在A电脑调试的接口数据&#xff0c;需要移动到B电脑上&#xff0c;如何实…

python第三方库的离线安装与自动安装脚本(以flask为例 Ubuntu18.04系统)

1.第三方库安装方式 1.1 pip 安装 以flask为例&#xff0c;使用指令 pip install flask即可安装 其他选项&#xff1a; install 安装库 uninstall 卸载库 list 列出已经安装的库 show 列出已安装的库的详细信息 search 通过PyPI搜索库 help 帮助命令1.2 源码安装 官网获取…