首页 > 其他分享 >[LeetCode] 805. 数组的均值分割

[LeetCode] 805. 数组的均值分割

时间:2022-11-14 10:48:44浏览次数:56  
标签:cnt right sum 均值 tot 数组 LeetCode 805 left

设变量 sum: 数组的和,n:数组元素个数,tot: 子数组和,cnt:子数组元素个数
通过简单的公式变换可以得到:sum / n = tot / cnt
sum / n 的值是确定的,所以也就是需要找到一个子数组的平均值为 sum / n
最简单的方法是通过二进制枚举进行查找,但 n <= 30,可能会超时
如果 n 能够小一半就能够通过枚举进行查找了
我们尝试将数组平均分为左右两半,对每个分数组进行枚举判断
但是会漏掉同时包含两个分数组中元素的子数组
也就是说存在左右分数组中平均值不等于 sum / n,但是合起来等于 sum / n
假设已知左分数组: tot_left, cnt_left,想要在右分数组中找到 tot_right, cnt_right,使得 (tot_left + tot_right) / (cnt_left + cnt_right) = sum / n
这个并不容易操作:因为这里面有两个变量 tot_right 和 cnt_right
如果平均值为0的话,就可以转换为 1 个变量: tot_left + tot_right = 0
所以只要判断右数组中有没有值等于 -tot_left 的就行了
上面通过枚举一半,然后判断另一半中是否有对应答案的方法是折半查找。

标签:cnt,right,sum,均值,tot,数组,LeetCode,805,left
From: https://www.cnblogs.com/huihao/p/16888259.html

相关文章

  • 【算法训练营day16】LeetCode104. 二叉树的最大深度 LeetCode559. n叉树的最大深度 Le
    LeetCode104.二叉树的最大深度题目链接:104.二叉树的最大深度初次尝试直接看题解学习思路。看完代码随想录后的想法本题使用的是二叉树的后序遍历,实际上是在求根节点......
  • leetcode622. 设计循环队列
    题目设计你的循环队列实现。循环队列是一种线性数据结构,其操作表现基于FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队......
  • leetcode 70. 爬楼梯 js实现
    假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例1:输入:n=2输出:2解释:有两种方法可以爬......
  • leetcode 3. 无重复字符的最长子串
    给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1:输入:s="abcabcbb"输出:3解释:因为无重复字符的最长子串是"abc",所以其长度......
  • LeetCode 167.TowSum
    双指针classSolution{public:vector<int>twoSum(vector<int>&numbers,inttarget){intl=0,r=numbers.size()-1,sum=0;while(l<r){......
  • #yyds干货盘点# LeetCode 腾讯精选练习 50 题:相交链表
    题目:给你两个单链表的头节点 headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回null。图示两个链表在节点c1开始相交:题目数据......
  • LeetCode(1)
    优美子数组将输入的数组逐个取模,得到一个新的数组,计算其前缀和数组子数组(i到j)中如果恰好有K个1,即和为K,那么这个数组就满足了题目要求,有K个奇数数字转化:sum[i]-sum......
  • Leetcode刷题第三周
    字符串:反转字符串344classSolution{publicvoidreverseString(char[]s){//左右指针intleftNode=0;intrifhtNode=s.lengt......
  • leetcode 5. 最长回文子串
    给你一个字符串 s,找到 s 中最长的回文子串。 示例1:输入:s="babad"输出:"bab"解释:"aba"同样是符合题意的答案。示例2:输入:s="cbbd"输出:"bb" 提示:1<......
  • 剑指 Offer 41. 数据流中的中位数 - 力扣(Leetcode)
    剑指Offer41.数据流中的中位数-力扣(Leetcode)分析维护两个堆,一个大根堆,一个小根堆。插入操作:当进行插入时,先判断大根堆中是否有元素,如果没有直接插入大根堆,若有......