Q44 Largest Sum Subarray of Size at least K | Practice | GeeksforGeeks

PHOTO EMBED

Thu Mar 30 2023 07:57:50 GMT+0000 (Coordinated Universal Time)

Saved by @Ayush_dabas07

//{ Driver Code Starts
//Initial Template for Java

import java.util.*;
import java.lang.*;
import java.io.*;

class GFG {
	public static void main(String[] args) throws IOException
	{
	        BufferedReader br =
            new BufferedReader(new InputStreamReader(System.in));
        int t =
            Integer.parseInt(br.readLine().trim()); // Inputting the testcases
        while(t-->0)
        {
            long n = Long.parseLong(br.readLine().trim());
            long a[] = new long[(int)(n)];
            // long getAnswer[] = new long[(int)(n)];
            String inputLine[] = br.readLine().trim().split(" ");
            for (int i = 0; i < n; i++) {
                a[i] = Long.parseLong(inputLine[i]);
            }
            long k = Long.parseLong(br.readLine().trim());
            
            Compute obj = new Compute();
            System.out.println(obj.maxSumWithK(a, n, k));
            
        }
	}
}


// } Driver Code Ends


//User function Template for Java


class Compute {
    
    public long maxSumWithK(long arr[], long n, long k)
    {
        //applying kadanes and storing answers
        long msa[] = new long[arr.length];
        msa[0] = arr[0];
        long csum = arr[0]; 
        for(int i = 1 ; i < arr.length ; i++){
            
            if(csum > 0)
            csum += arr[i];
            
            else
            csum = arr[i];
            
            msa[i] = csum;
        }
        
        // for(int i = 0 ; i < arr.length ; i++)
        // System.out.print(msa[i] + " ");
        
        // System.out.println();
        
        //finding ans of first window
        long exactK = 0 , ans = Integer.MIN_VALUE;
        
        for(int i = 0 ; i < (int)k ; i++)
        exactK += arr[i];
        
        ans = Math.max(ans , exactK);
        //moving the window through rest of the array 
        
        for(int j = (int)k; j < arr.length ; j++){
            
            exactK += arr[j] - arr[j - (int)k];
            
            long atleastK = exactK + msa[j- (int)k];
            
            ans = Math.max(ans , exactK);
            ans = Math.max(ans , atleastK);
        }
        //returning answer
        return ans;
    }
}
















content_copyCOPY

https://practice.geeksforgeeks.org/problems/largest-sum-subarray-of-size-at-least-k3121/1