I really can’t complete this my test case keep failing please help
4 test case failing
2
5
8000 8565 8050 1234 1111
Your code gives index our of bounds exception for this test case. Please modify your code for the same. If you are unable to still get the correct answer, I can help further
package Arrays;
import java.util.Arrays;
import java.util.Scanner;
public class PainterPartitionProblem {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int painters = scanner.nextInt();
int boards = scanner.nextInt();
int[] arr = new int[boards];
for (int i = 0; i < boards; i++) {
arr[i] = scanner.nextInt();
}
System.out.println(area(arr, painters));
}
public static int helper(int[] arr, int gap, int painters) {
int sum = 0;
int lo = 0;
int i = 0;
while (lo < arr.length-i && painters > 0) {
sum += arr[lo + i];
if (sum == gap) {
if(lo!=arr.length-1){
sum=0;
}
lo = lo + i +1;
i = -1;
painters--;
} else if (sum > gap) {
if(lo!=arr.length-1){
sum=0;
}
lo = lo + i ;
i = -1;
painters--;
}
i++;
}
if (lo < arr.length - 1) {
return -1;
} else {
return sum;
}
}
public static int area(int[] arr, int painters) {
int lo = arr[arr.length - 1];
int high = 0;
for (int i = 0; i < arr.length; i++) {
high += arr[i];
}
int ans = 0;
while (lo <= high) {
int mid = lo + (high - lo) / 2;
if (helper(arr, mid, painters)>0) {
ans = helper(arr,mid,painters);
high = mid-1;
} else {
lo = mid+1;
}
}
return ans;
}
}
This is my code.
It is giving 1111 on giving that input
I would need more help
package Arrays;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Scanner;
public class PainterPartitionApproachNew {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int painters = scanner.nextInt();
int boards = scanner.nextInt();
int[] arr = new int[boards];
for (int i = 0; i < boards; i++) {
arr[i] = scanner.nextInt();
}
Arrays.sort(arr);
System.out.println(area(arr, painters));
}
public static int helper(int[] arr, int gap, int painters) {
int sum = 0;
int k = --painters;
int max = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
if (sum > gap && i != arr.length - 1) {
if (sum - arr[i] > max && i != arr.length - 1) {
max = sum - arr[i];
k--;
sum = arr[i];
}
}
if (i == arr.length - 1) {
if (sum > gap) {
if (sum - arr[i] > max) {
max = sum - arr[i];
if (arr[i] > max) {
max = arr[i];
}
}
k--;
}else{
if(sum>max){
max= sum;
}
}
}
}
if (k >= 0) {
return max;
} else {
return -1;
}
}
public static int area(int[] arr, int painters) {
int lo = arr[arr.length - 1];
int high = 0;
for (int i = 0; i < arr.length; i++) {
high += arr[i];
}
int ans = 0;
while (lo <= high) {
int mid = lo + (high - lo) / 2;
if (helper(arr, mid, painters) > 0) {
ans = helper(arr, mid, painters);
high = mid - 1;
} else {
lo = mid + 1;
}
}
return ans;
}
}
Hey this is my final code my test cases 0 2 4 are failing, please suggest changes in this code or send me the improved one , I am unable to make more changes in this one