classSolution { public: intcountSubarrays(vector<int> &nums, int k){ int pos, n = nums.size(); for (int i = 0; i < nums.size(); i++) { if (nums[i] == k) { pos = i; break; } } unordered_map<int, int> cnt; cnt[0] = 1; // i=pos 的时候 c 是 0,直接记到 cnt 中,这样下面不是大于就是小于 for (int i = pos + 1, c = 0; i < n; ++i) { c += nums[i] > k ? 1 : -1; ++cnt[c]; }
int ans = cnt[0] + cnt[1]; // i=pos 的时候 c 是 0,直接加到答案中,这样下面不是大于就是小于 for (int i = pos - 1, c = 0; i >= 0; --i) { c += nums[i] < k ? 1 : -1; ans += cnt[c] + cnt[c + 1]; } return ans; } };