// Binary Search : Time Complexity : O(n * log(sum - mx)) or O(n * log(sum)) import java.util.*; import java.io.*; class GFG { public static void main(String args[]) { int arr[]={10,20,10,30}; int n=arr.length; int k=2; System.out.print(minPages(arr,n,k)); // OUTPUT : 40 } public static boolean isFeasible(int arr[],int n,int k, int ans){ int req=1,sum=0; for(int i=0;i<n;i++){ if(sum+arr[i]>ans){ req++; sum=arr[i]; } else{ sum+=arr[i]; } } return (req<=k); } public static int minPages(int arr[],int n, int k){ int sum=0,mx=0; for(int i=0;i<n;i++){ sum+=arr[i]; mx=Math.max(mx,arr[i]); } int low=mx,high=sum,res=0; while(low<=high){ int mid=(low+high)/2; if(isFeasible(arr,n,k,mid)){ res=mid; high=mid-1; }else{ low=mid+1; } } return res; } } // Naive Method : Time : Exponential (very slow) import java.util.*; import java.io.*; class GFG { public static void main(String args[]) { int arr[]={10,20,10,30}; int n=arr.length; int k=2; System.out.print(minPages(arr,n,k)); // OUTPUT : 40 } public static int sum(int arr[],int b, int e){ int s=0; for(int i=b;i<=e;i++) s+=arr[i]; return s; } public static int minPages(int arr[],int n, int k){ if(k==1) return sum(arr,0,n-1); if(n==1) return arr[0]; int res=Integer.MAX_VALUE; for(int i=1;i<n;i++){ res=Math.min(res,Math.max(minPages(arr,i,k-1),sum(arr,i,n-1))); } return res; } }
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter