Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- int max_klength_subarray_sum(vector<int>& v, int &n, int &k) {
- int ans = INT_MIN, tempsum = 0, s = 0;
- for (int i = 0; i < n; i++) {
- tempsum += v[i];//include this element
- if ((i - s + 1) == k) {//checking the window size
- ans = max(ans, tempsum);
- tempsum -= v[s];
- s++;
- }
- }
- return ans;
- }
- vector<int> count_range_max_klength_subarray_sum(vector<int>& v, int &n, int&k) {
- int prevsum = -1, countans = 0, tempsum = 0, s = 0;
- pair<int, int> ans;
- for (int i = 0; i < n; i++) {
- tempsum += v[i];//include this element
- if ((i - s + 1) == k) {//checking the window size
- if (tempsum > prevsum) {
- prevsum = tempsum;
- countans = 1;
- ans.first = s, ans.second = i;
- }
- else if (tempsum == prevsum) {
- // ans.first = s, ans.second = i;
- countans++;
- }
- //tempsum-> sum of this window
- tempsum -= v[s];
- s++;
- }
- }
- return {countans, ans.first, ans.second};
- }
- pair<int, int> range_max_klength_subrray_sum(vector<int> &v, int &n, int &k) {/// nearer to end
- int prevsum = -1, tempsum = 0, s = 0;
- pair<int, int> ans;
- for (int i = 0; i < n; i++) {
- tempsum += v[i];
- if ((i - s + 1) == k) {
- //tempsum -> ans of this window
- if (tempsum >= prevsum) {
- prevsum = tempsum;
- ans.first = s, ans.second = i;
- }
- tempsum -= v[s];
- s++;
- }
- }
- return ans;
- }
- pair<int, int> range_max_klength_subrray_sum_nearer_to_start(vector<int> &v, int &n, int &k) {
- int prevsum = -1, tempsum = 0, s = 0;
- pair<int, int> ans;
- for (int i = 0; i < n; i++) {
- tempsum += v[i];
- if ((i - s + 1) == k) {
- //tempsum -> ans of this window
- if (tempsum > prevsum) {
- prevsum = tempsum;
- ans.first = s, ans.second = i;
- }
- tempsum -= v[s];
- s++;
- }
- }
- return ans;
- }
- int main() {
- //given an n length array and k, you eed to find the max subarray sum of length k.
- int n, k; cin >> n >> k;
- vector<int> v(n);
- for (int i = 0; i < n; i++) cin >> v[i];
- cout << max_klength_subarray_sum(v, n, k);
- vector<int> ans = count_range_max_klength_subarray_sum(v, n, k);
- return 0;
- //follow-up questions
- /*
- 1.>find number of windows having maximum sum--> done
- 2.>find the range of window having maxium sum.--> done
- 3.>find the range of window having maximum sum, but it can be as nearer to the start.--> done
- 4.>find the range of window having maximum sum, but it can be as nearer to the end.-->
- */
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement