Longest subarray with sum divisible by K Java
- Get link
- X
- Other Apps
PROGRAM TO FIND THE LONGEST SUB-ARRAY WITH SUM DIVISIBLE BY K
import java.io.*; import java.util.*; class GfG { // function to find the longest subarray // with sum divisible by k static int longSubarrWthSumDivByK(int arr[], int n, int k) { // unodered map 'um' implemented as // hash table HashMap<Integer, Integer> um= new HashMap<Integer, Integer>(); // 'mod_arr[i]' stores (sum[0..i] % k) int mod_arr[]= new int[n]; int max = 0; int curr_sum = 0; // traverse arr[] and build up the // array 'mod_arr[]' for (int i = 0; i < n; i++) { curr_sum += arr[i]; // as the sum can be negative, // taking modulo twice mod_arr[i] = ((curr_sum % k) + k) % k; } for (int i = 0; i < n; i++) { // if true then sum(0..i) is // divisible by k if (mod_arr[i] == 0) // update 'max' max = i + 1; // if value 'mod_arr[i]' not present in 'um' // then store it in 'um' with index of its // first occurrence else if (um.containsKey(mod_arr[i]) == false) um.put(mod_arr[i] , i); else // if true, then update 'max' if (max < (i - um.get(mod_arr[i]))) max = i - um.get(mod_arr[i]); } // required length of longest subarray with // sum divisible by 'k' return max; } public static void main (String[] args) { int arr[] = {2, 7, 6, 1, 4, 5}; int n = arr.length; int k = 3; System.out.println("Length = "+ longSubarrWthSumDivByK(arr, n, k)); } }
OUTPUT:
Length = 4
- Get link
- X
- Other Apps
Comments
Post a Comment