文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给你一个整数数组 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 <= 10^5
1 <= nums[i] <= 10^4

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/ways-to-make-a-fair-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 正反双向的奇偶前缀和都求出来
  • 删除某个元素后,逆向的奇偶后缀和需要交换
class Solution {public:int waysToMakeFair(vector<int>& nums) {int n = nums.size();int i = 0, odd = 0, even = 0;vector<int> odd1(n, 0), odd2(n, 0), even1(n, 0), even2(n, 0);for(i = 0, odd = 0, even = 0; i < n; i++) {if(i%2 == 1){odd1[i] = odd;//除了i下标,之前的奇数和even1[i] = even;//奇数下标之前的偶数下标之和odd += nums[i];}else{even1[i] = even;//除了i下标,之前的偶数和odd1[i] = odd;even += nums[i];}}for(i = n-1, odd = 0, even = 0; i >= 0; i--) {if(i%2 == 1){odd2[i] = odd;//除了i下标,之后的奇数和even2[i] = even;odd += nums[i];}else{even2[i] = even;//除了i下标,之后的偶数和odd2[i] = odd;even += nums[i];}}int ans = 0;for(int i = 0; i < n; ++i){   //删除 i 了,后序的偶数和变成奇数和//奇数和变成偶数和if(odd1[i]+even2[i] == even1[i]+odd2[i])ans++;}return ans;}
};

332 ms 109.5 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1664. 生成平衡数组的方案数(前缀和+后缀和)相关推荐

  1. leetcode 5607. 生成平衡数组的方案数 前缀和

    生成平衡数组的方案数 给你一个整数数组 nums .你需要选择 恰好 一个下标(下标从 0 开始)并删除对应的元素.请注意剩下元素的下标可能会因为删除操作而发生改变. 比方说,如果 nums = [6 ...

  2. Leetcode1712. 将数组分成三个子数组的方案数[C++题解]:双指针和前缀和

    文章目录 本题分析 题目链接 本题分析 题目重述: 给定一个非负的数组,要求将其分成3个非空的三段,要求每一段的数字之和依次递增(可以相等),求总共有几种分法. 题目解答: 双指针算法 思路:枚举第二 ...

  3. LeetCode 1712. 将数组分成三个子数组的方案数(前缀和 + 二分查找)

    文章目录 1. 题目 2. 解题 221 / 3117,前7.1% 574 / 9692,前 5.9% 周赛前2题如下: LeetCode 5641. 卡车上的最大单元数(排序,模拟) LeetCod ...

  4. leetcode 1269. 停在原地的方案数(dp)

    示例 1: 输入:steps = 3, arrLen = 2 输出:4 解释:3 步后,总共有 4 种不同的方法可以停在索引 0 处. 向右,向左,不动 不动,向右,向左 向右,不动,向左 不动,不动 ...

  5. leetcode/加减的目标值,给数组元素添加+或-号组成的表达式值=target的方案数

    代码 package com.xcrj;import java.util.Arrays;/*** 剑指 Offer II 102. 加减的目标值* 给定一个正整数数组 nums 和一个整数 targe ...

  6. LeetCode 1976. 到达目的地的方案数(迪杰斯特拉 Python 优先队列)

    文章目录 1. 题目 2. 解题 1. 题目 你在一个城市里,城市由 n 个路口组成,路口编号为 0 到 n - 1 ,某些路口之间有 双向 道路. 输入保证你可以从任意路口出发到达其他任意路口,且任 ...

  7. LeetCode 1569. 将子数组重新排序得到同一个二叉查找树的方案数(DP)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个数组 nums 表示 1 到 n 的一个排列. 我们按照元素在 nums 中的顺序依次插入一个初始为空的二叉查找树(BST). 请你统计将 num ...

  8. LeetCode 1444. 切披萨的方案数(DP)

    1. 题目 给你一个 rows x cols 大小的矩形披萨和一个整数 k ,矩形包含两种字符: 'A' (表示苹果)和 '.' (表示空白格子). 你需要切披萨 k-1 次,得到 k 块披萨并送给别 ...

  9. 切披萨n块需要几刀原理c语言,LeetCode 1444. 切披萨的方案数(DP)

    1. 题目 给你一个 rows x cols 大小的矩形披萨和一个整数 k ,矩形包含两种字符: 'A' (表示苹果)和 '.' (表示空白格子). 你需要切披萨 k-1 次,得到 k 块披萨并送给别 ...

最新文章

  1. linux查看安装的所有内核,Linux怎么查看系统已安装内核
  2. 【程序人生】不想一辈子做底层码农?快来看看这十条箴言
  3. Java100例题(一)
  4. 百度网盘自动备份php,Linux定时备份数据到百度云盘
  5. 顺义教委携手华平共建视频图像综合管理平台
  6. 谈通过测试与失败测试
  7. Vue入门---- vue-router
  8. 判断两个日期相差的天数
  9. [ExtJs4.0]数据从excle2003导入到数据库【2-1】
  10. docker安装oracle11g最全步骤
  11. 【电子相册制作软件】名编辑电子杂志大师教程 | 如何在翻页电子相册中添加动态的flash背景?
  12. Cisco模拟器DHCP详细教程
  13. php新浪博客模板,supersite php模板
  14. 云服务器怎么连,云主机连接操作步骤是怎样的?
  15. 程序员的桌面画风竟然是酱紫的!
  16. Failed to apply plugin [id 'com.gradle.build-scan']
  17. win10下速腾聚创RS-Lidar-32配置教程
  18. 0x80073712_win10系统更新提示错误代码“0x80073712”的解决方法
  19. Linux上安装MySQl超详细教程(CentOS系统)
  20. 10/11论文关键词,自动去偏框架论文翻译,发文章思考

热门文章

  1. tornado学习笔记day05-访问数据库
  2. 解决:build_attrs() takes at most 2 arguments (3 given)
  3. 【python】list append()和extend()区别
  4. SparkHiveSQL中Join操作的谓词下推?
  5. linux驱动 自旋锁
  6. 三种不使用中间参数,交换两个参数的值的方法
  7. mysql查询数据库日期_mysql如何查询日期与时间
  8. 鼠标点击实现花瓣雨_每周实验 | 黄金雨
  9. BIOS误删win10引导 delete boot option如何恢复
  10. 转!!ftp的主动模式(port)与被动模式(PASV)