[LeetCode 1664]生成平衡数组的方案数

news2024/9/21 8:02:33

题目描述

题目链接:[LeetCode 1664]生成平衡数组的方案数

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

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

选择删除下标 1 ,剩下的数组为 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 <= 1 0 5 10^5 105
1 <= nums[i] <= 1 0 4 10^4 104

思路分析

1.首先数组的长度为 1 0 5 10^5 105级别,说明要在O(n)或者O( n l o g n nlogn nlogn)级别解决问题,这里我使用的方法是前缀和:

在这里插入图片描述

如图,维护o1,o2,e1,e2四个数组,

o1[i]维护的是i节点左边所有奇数节点的和,
o2[i]维护的是i节点右边所有奇数节点的和,
e1[i]维护的是i节点左边所有偶数节点的和,
e2[i]维护的是i节点右边所有偶数节点的和,

这里以o1和e2为例,删除掉i节点后,左边的奇偶性不变,i节点之后的奇偶性发生反转,所以整个数组的奇数位置的和为o1[i] + e2[i],同理可求偶数和

代码

class Solution {
public:
    int waysToMakeFair(vector<int>& nums) {
        int n = nums.size();
        vector<int> o1(n), o2(n), e1(n), e2(n);
        //so记录当前的奇数前缀和,se记录当前的偶数前缀和
        int so = 0, se = 0;
        for (int i = 0; i < n; i++) {
            o1[i] = so, e1[i] = se;
            if(i % 2) so += nums[i];
            else se += nums[i];
        }

        for (int i = 0; i < n; i++) {
        	//如果该节点是奇数节点,o2除了要减去左边的奇数和,还要减去该节点的值
            if(i % 2) o2[i] = so - o1[i] - nums[i], e2[i] = se - e1[i];
            //同理该节点为偶数节点时,e2除了要减去左边的偶数和,还要减去该节点的值
            else e2[i] = se - e1[i] - nums[i], o2[i] = so - o1[i];
        }

        int res = 0;
        for (int i = 0; i < n; i++) {
            if(o1[i] + e2[i] == o2[i] + e1[i])
                res++;
        }


        return res;
    }
};

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

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

相关文章

群晖(docker图形化界面)使用 SpeedTest 测速

群晖(docker图形化界面)使用 SpeedTest 测速 博主博客 https://blog.uso6.comhttps://blog.csdn.net/dxk539687357 本文主要介绍在群晖中安装 speedtest 进行网络测速。 一、安装 docker 在套件中心搜索并且安装 docker。 二、下载容器 在 注册表 中搜索 adolfintel/speedte…

UART、RS232、RS485和RS422

1.UART UART是通用异步收发传输器&#xff08;Universal Asynchronous Receiver/Transmitter)&#xff0c;是一种通用的串行、异步通信总线&#xff0c;是设备间进行异步通信的关键模块。UART负责处理数据总线和串行口之间的串/并、并/串转换&#xff0c;并规定了帧格式&#…

PPT制作心得

1.插入形状&#xff1a; 这里有三个部分可以设置&#xff1a; 填充可以设置用什么颜色来填充 轮廓可以设置边框的颜色 (样式是设置 填充轮廓&#xff0c;也就是说有一些默认的填充轮廓组合&#xff09; 还有里面的文字的大小&#xff0c;字体&#xff0c;颜色 2.如何画水平…

深度解析2023世界人工智能大会

1、2020年世界人工智能大会&#xff0c;此次大会的主要目的是什么&#xff1f; 我们现在的社会是一个科技快速发展的国家&#xff0c;因为我们已经不会再为了温饱的问题而操心&#xff0c;而是越来越追求自己的精神享受。然而科技在这一方面也是发展非常迅速的&#xff0c;我们…

请求头 x-ca-key、x-ca-nonce、x-ca-signature 加密分析第一篇

本篇博客为大家开始着手分析 请求头 x-ca-key、x-ca-nonce、x-ca-signature 加密相关内容 目标站点在本文进行隐藏&#xff0c;如有需要&#xff0c;可直接联系 一般你能搜到这篇博客&#xff0c;代表你采集的站点使用类似加密。 请求头解密目录x-ca-key、x-ca-nonce、x-ca-sig…

[acwing周赛复盘] 第 88 场周赛20230128

[acwing周赛复盘] 第 88 场周赛20230128 一、本周周赛总结二、 4800. 下一个1. 题目描述2. 思路分析3. 代码实现三、4801. 强连通图1. 题目描述2. 思路分析3. 代码实现四、4802. 金明的假期1. 题目描述2. 思路分析3. 代码实现六、参考链接一、本周周赛总结 在T2卡了半天&#…

签到网站js逆向与python实现

登陆分析 数据分析 Chrome浏览器进入填报系统,选择对应学校,来到登陆界面。 打开Chrome开发者工具(快捷键F12),模拟手机端。 111111 222222 333333 点击登陆,分析网络数据包。 表单有四个必需字段: 身份(UserType) 学号(XGH) 姓名(Name) 密码(PassWord) 一个…

2023最新版会声会影有哪些新功能介绍?

会声会影是Corel制作的一款功能强大的视频编辑软件&#xff0c;英文名&#xff1a;Corel VideoStudio。会声会影2023作为当下最为受欢迎的视频编辑处理程序&#xff0c;其在业内可以说享有极高的知名度&#xff1b;而全新的2023版本更是如此&#xff0c;很多忠实的用户都想来体…

如何确保API 的稳定性与正确性?你只需要这一招

一、什么是rest-assured现在&#xff0c;越来越多的 Web 应用转向了RESTful的架构&#xff0c;很多产品和应用暴露给用户的往往就是一组 REST API&#xff0c;这 样有一个好处&#xff0c;用户可以根据需要&#xff0c;调用不同的 API&#xff0c;整合出自己的应用出来。从这个…

Linux常用命令——scp命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) scp 加密的方式在本地主机和远程主机之间复制文件 补充说明 scp命令用于在Linux下进行远程拷贝文件的命令&#xff0c;和它类似的命令有cp&#xff0c;不过cp只是在本机进行拷贝不能跨服务器&#xff0c;而且s…

C++基础入门丨7. 指针——一文搞懂指针

操作系统&#xff1a;Windows 10 IDE&#xff1a;Visual Studio 2019 文章目录1 什么是指针2 指针变量的定义和使用3 指针所占用的空间4 空指针和野指针5 const修饰指针6 指针和数组7 指针和函数8 指针、函数、数组1 什么是指针 我们知道每一个变量都有一个内存位置&#xff0…

【ESLint】ESLint的安装配置及vscode插件

一、什么是ESLintESLint是可组装的JavaScript和JSX检查工具。工作中常用&#xff0c;所以最好有所了解。可以在官网中查询相关规则&#xff1a;ESLint - Pluggable JavaScript linter - ESLint中文二、ESLint的安装配置在创建自定义vue项目时&#xff0c;要勾选CSS Pre-process…

SpringCloud 微服务工具集

SpringCloud 微服务工具集 v1.1 微服务架构集大成者&#xff0c;云计算最佳业务实践。 版本: Hoxton SR6 1.什么是微服务 官网: https://www.martinfowler.com/articles/microservices.html In short, the microservice architectural &#xff08;架构&#xff09;style is…

32种EMC标准电路分享-电路接口防护-标准参考电路

30种EMC标准电路01 AC24V接口EMC设计标准电路02 AC110V-220VEMC设计标准电路03 AC380V接口EMC设计标准电路04 AV接口EMC设计标准电路05 CAN接口EMC设计标准电路06 DC12V接口EMC设计标准电路07 DC24V接口EMC设计标准电路08 DC48接口EMC设计标准电路09 DC110V接口EMC设计标准电路…

Blender 物理属性 (四)流体

文章目录流体简介.域.创建域.直接创建.通过物体创建.域的属性.设置.液体&#xff08;域类型为液体时&#xff09;.扩散.网格.气体&#xff08;域类型为气体时&#xff09;.消融.噪波.视图显示.缓存.流.创建水.创建火与烟.流来源.初始速度.渲染火与烟.效果器.流体简介. 1 流体用…

这些好用的办公软件分享给你

软件一&#xff1a;备忘录 现在大部分手机备忘录都提供语音记录功能&#xff0c;可以实时录音并转换成文本内容记录下来&#xff0c;使用起来还是比较方便的&#xff0c;但是要注意它支持转换的时长是有限制的哦&#xff01; 操作步骤&#xff1a;打开手机备忘录&#xff0c;…

【宝塔】【Windows】【Blessing-Skin】【我的世界】用宝塔Windows搭建皮肤站

文章目录前言所需环境相关链接安装宝塔安装步骤访问宝塔同意协议安装环境安装WNMP添加站点开始安装皮肤站配置网站配置Nginx URL重写规则&#xff08;即 伪静态&#xff09;配置PHP安装皮肤站一些小调整安装插件常见问题 - 插件市场严重错误添加认证服务器结尾前言 为什么不用…

数影周报:LOL源代码遭黑客拍卖,阿里杭州西溪全球总部2023年底前全面建成

本周看点&#xff1a;《英雄联盟》游戏源代码遭黑客拍卖&#xff1b;消息称Salesforce 将任命三位新独立董事&#xff1b;2022年下架移动应用程序420款&#xff1b;抖音超市上线&#xff1b;戴尔以约1亿美元收购以色列初创公司Cloudify......数据安全那些事《英雄联盟》游戏源代…

【Pytorch项目实战】之自然语言处理:RNN、LSTM、GRU、Transformer

文章目录自然语言处理算法一&#xff1a;循环神经网络&#xff08;Recurrent Natural Network&#xff0c;RNN&#xff09;算法二&#xff1a;长短时记忆神经网络&#xff08;Long Short-Term Memory&#xff0c;LSTM&#xff09;算法三&#xff1a;门控循环单元神经网络&#…

基于android的新闻阅读系统

需求信息&#xff1a; 从模块的角度将APP的主要内容划分为登录模块、新闻模块、留言模块、报道模块、关注模块、语音模块这六个功能模块&#xff0c;完成以下功能&#xff1a; &#xff08;1&#xff09;登录模块 当用户打开应用程序后&#xff0c;如果直接登录&#xff0c;由于…