首页 > 其他分享 >力扣---1664. 生成平衡数组的方案数

力扣---1664. 生成平衡数组的方案数

时间:2023-03-15 21:22:13浏览次数:38  
标签:力扣 下标 nums 偶数 元素 --- 数组 1664 奇数

给你一个整数数组 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
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/ways-to-make-a-fair-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


 

之前也写过这道题,再写一遍。

删除元素后,意味着后面的奇数位元素会变成偶数位元素,偶数位元素会变成奇数位元素。而前面的奇数位元素和偶数位元素并不会改变。

可以想到随着不断删除元素,后方的奇数位元素和和偶数位元素和不断进行交换,与前面的奇数位元素和和偶数位元素和相加后进行比较。

class Solution {
    public int waysToMakeFair(int[] nums) {
        // 分别存储右半部分奇数位和偶数位的和。
        int right0 = 0;
        int right1 = 0;
        for (int i = 0; i < nums.length; i += 2) {
            right0 += nums[i];
            if (i + 1 < nums.length) {
                right1 += nums[i + 1];
            }
        }
        int res = 0;
        // 分别存储左边的奇数位和偶数位的和。
        int left0 = 0;
        int left1 = 0;
        for (int i = 0; i < nums.length; i += 2) {
            right0 -= nums[i];
            if (left0 + right1 == left1 + right0) {
                res ++;
            }
            // 偶数位,由于换来换去太麻烦,一次走两步,可以省去换来换去的步骤。
            if (i + 1 < nums.length) {
                left0 += nums[i];
                right1 -= nums[i + 1];
                if (left0 + right1 == left1 + right0) {
                    res ++;
                }
            left1 += nums[i + 1];
            }
        }
        return res;
    }
}

 

标签:力扣,下标,nums,偶数,元素,---,数组,1664,奇数
From: https://www.cnblogs.com/allWu/p/17220087.html

相关文章

  • MSF练习 - 永恒之蓝
    永恒之蓝漏洞利用一、启动MSFmsfconsole┌──(root㉿kali)-[~]└─#msfconsole                          ......
  • Vue.js 事件处理-事件修饰符
    视频<!DOCTYPEhtml><html> <head> <metacharset="UTF-8"/> <title>事件修饰符</title> <!--引入Vue--> <scripttype="text/javascript"src="../js/vue.j......
  • 剑指 Offer 58 - II. 左旋转字符串
    题目剑指Offer58-II.左旋转字符串字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"......
  • VulnHub-DC: 8
    靶机地址:https://www.vulnhub.com/entry/dc-8,367/目标:getrootandtoreadtheoneandonlyflag一、主机扫描nmap-sP192.168.11.0/24|grep192.168.11|awk'......
  • GPT-4 技术报告更多细节被挖出
    在一次测试中,GPT-4的任务是在TaskRabbit平台(美国58同城)雇佣人类完成任务。GPT-4找了一个人帮他完成一个那种"确定你是人类"的验证码。对方问:你是个机器人么为......
  • Spring Study -lesson07-03-15
    自动装配Bean 两种自动装配方法:第一byName ,第二byType属性类型(用byType可以省略写id)。byName要保证所有bean的id必须唯一,这个bean必须和自动注入的属性set方法的......
  • Vue.js 事件处理-事件的基本使用v-on传参
    视频<!DOCTYPEhtml><html> <head> <metacharset="UTF-8"/> <title>事件的基本使用</title> <!--引入Vue--> <scripttype="text/javascript"src="../js/v......
  • linux-screen终端会话后台运行
    screenlinux终端关闭,也不影响终端里命令的正常运行,就需要screen及tmux特点会话恢复多窗口会话共享install&&usedyuminstall-yscreen//状态说明Attached......
  • 每日总结-23.3.15
    今日新建一个类数组后,对其内容赋值出现了以下问题。Pd[]pdd=newPd[20];Cannotassignfield"mingcheng"because"pdd2[0]"isnull翻阅资料后得知当我从数组中......
  • day04-实现SpringBoot底层机制
    实现SpringBoot底层机制Tomcat底层启动分析+Spring容器初始化+Tomcat关联Spring容器1.任务1-创建Tomcat,并启动(1)创建一个Maven项目,修改pom.xml文件:我们需要自己创建Tomca......