1248. 统计「优美子数组」(前缀和) 📅 发布时间:2026/9/12 17:53:58 👁 浏览次数: 链接1248. 统计「优美子数组」 - 力扣LeetCode题解1248. 统计「优美子数组」 - 力扣LeetCodeclass Solution { public: int numberOfSubarrays(vectorint nums, int k) { if(nums.size() 0) { return 0; } vectorint count(nums.size()1, 0); // 比如count[i]下标i表示奇数个数count[i]表示情况有多少种 //count[0]1; int odd 0; //累计前面到i位置有奇数的个数pre[i]区间[0,i] int sum 0; for(int i 0; i nums.size(); i) { // nums[i]是奇数 if(nums[i] 1) { // 奇数数量增加 odd; } // 获得odd-k个个奇数情况下种 if(odd k) { sum 1; } else if(odd k) { sum count[odd-k]; } // 奇数个数为odd的情况增加一种 count[odd]; } return sum; } };class Solution { public: int numberOfSubarrays(vectorint nums, int k) { int len nums.size(); if (len 0) { return 0; } unordered_mapint, int prefix; prefix[0] 1; // 奇数数字出现0次的个数是1 int count 0; int result 0; for (int i 0; i len; i) { if (nums[i] % 2) { count; } if (count-k 0) { result prefix[count-k]; } prefix[count]; } return result; } };count[0] 1表示空前缀还没取任何元素时奇数个数为 0 这一情况已经出现了一次用来正确处理从数组开头开始的子数组。