力扣2025.分割数组的最多方案数

力扣2025.分割数组的最多方案数

  • 哈希表 + 前缀和

    • 用两个哈希表分别存元素(之后会遍历)左侧和右侧的前缀和
cpp 复制代码
  typedef long long LL;
  class Solution {
  public:
      int waysToPartition(vector<int>& nums, int k) {
          int n = nums.size(),ans = 0;
          vector<LL> sum(n);
          unordered_map<LL,int> cnt,mp;
          sum[0] = nums[0];
          for(int i=1;i<n;i++)
          {
              sum[i] = sum[i-1] + nums[i];
              //全存到右侧
              cnt[sum[i-1]] ++;
          }
          LL tot = sum[n-1];
          //不改的解
          if(tot % 2 == 0) ans = cnt[tot/2];
          for(int i=0;i<n;i++)
          {
              //每个元素都修改试试
              int d = k - nums[i];
              //改完发现满足
              if((tot + d) % 2 == 0)
                  //左侧的满足的前缀和 + 右侧的满足的前缀和(左边的合法分割点+右边的)
                  ans = max(ans,mp[(tot + d) / 2] + cnt[(tot - d) / 2]);
              //右边 ++,左边--
              mp[sum[i]] ++;
              cnt[sum[i]] --;
          }
          return ans;
      }
  };
相关推荐
细节处有神明18 分钟前
开源数据之历史气象数据的获取与使用
人工智能·python·算法
小白开始进步26 分钟前
JAKA Zu12 机械臂运动学算法深度解析(含可视化方案)
python·算法·numpy
梵刹古音1 小时前
【C语言】 递归函数
c语言·数据结构·算法
yongui478341 小时前
混凝土二维随机骨料模型 MATLAB 实现
算法·matlab
酉鬼女又兒1 小时前
JAVA牛客入门11~20
算法
努力学算法的蒟蒻1 小时前
day75(2.3)——leetcode面试经典150
面试·职场和发展
觉醒大王1 小时前
硕士/博士研究生避坑指南
笔记·深度学习·学习·自然语言处理·职场和发展·学习方法
代码游侠1 小时前
C语言核心概念复习(二)
c语言·开发语言·数据结构·笔记·学习·算法
XX風1 小时前
2.1_binary_search_tree
算法·计算机视觉
不想写bug呀2 小时前
买卖股票问题
算法·买卖股票问题