Untitled

 avatar
unknown
plain_text
25 days ago
1.5 kB
1
Indexable
public class MaximumFruits {
    public int maxFruits(int[][] fruits, int startPos, int k) {
        int N = 2 * 100000 + 1;
        int[] prefix = new int[N];

        // Populate prefix array
        for (int[] fruit : fruits) {
            prefix[fruit[0]] += fruit[1];
        }

        // Compute prefix sums
        for (int i = 1; i < N; i++) {
            prefix[i] += prefix[i - 1];
        }

        int maxi = 0;

        // Move to the right
        for (int i = startPos; i <= Math.min(startPos + k, N - 1); i++) {
            int r = i;
            int x = i - startPos;
            int l = Math.max(0, startPos - (k - 2 * x));

            int sum = prefix[r];
            if (l > 0) {
                sum -= prefix[l - 1];
            }

            maxi = Math.max(maxi, sum);
        }

        // Move to the left
        for (int i = startPos; i >= Math.max(0, startPos - k); i--) {
            int l = i;
            int x = startPos - i;
            int r = Math.min(N - 1, startPos + (k - 2 * x));

            int sum = prefix[r];
            if (l > 0) {
                sum -= prefix[l - 1];
            }

            maxi = Math.max(maxi, sum);
        }

        return maxi;
    }

    public static void main(String[] args) {
        MaximumFruits solution = new MaximumFruits();
        int[][] fruits = {{2, 8}, {6, 3}, {8, 6}};
        int startPos = 5, k = 4;

        System.out.println(solution.maxFruits(fruits, startPos, k)); // Output: 9
    }
}
Leave a Comment