Untitled

 avatar
unknown
plain_text
a month ago
1.9 kB
2
Indexable
public class MaximumFruits {
    public int maxFruits(int[][] fruits, int startPos, int k) {
        int n = fruits.length;
        int maxPosition = fruits[n - 1][0];
        
        // Step 1: Construct prefix sum array
        int[] prefixSum = new int[maxPosition + 2];
        for (int[] fruit : fruits) {
            prefixSum[fruit[0] + 1] += fruit[1];
        }
        for (int i = 1; i <= maxPosition + 1; i++) {
            prefixSum[i] += prefixSum[i - 1];
        }
        
        int maxFruits = 0;
        
        // Step 2: Move left first, then right
        for (int leftSteps = 0; leftSteps <= Math.min(k, startPos); leftSteps++) {
            int leftPos = startPos - leftSteps;
            int rightSteps = k - 2 * leftSteps;
            int rightPos = Math.min(maxPosition, startPos + rightSteps);
            maxFruits = Math.max(maxFruits, prefixSum[rightPos + 1] - prefixSum[leftPos]);
        }
        
        // Step 3: Move right first, then left
        for (int rightSteps = 0; rightSteps <= k; rightSteps++) {
            int rightPos = startPos + rightSteps;
            if (rightPos > maxPosition) break;
            int leftSteps = k - 2 * rightSteps;
            int leftPos = Math.max(0, startPos - leftSteps);
            maxFruits = Math.max(maxFruits, prefixSum[rightPos + 1] - prefixSum[leftPos]);
        }
        
        return maxFruits;
    }

    public static void main(String[] args) {
        MaximumFruits solution = new MaximumFruits();
        System.out.println(solution.maxFruits(new int[][]{{2, 8}, {6, 3}, {8, 6}}, 5, 4)); // Output: 9
        System.out.println(solution.maxFruits(new int[][]{{0, 9}, {4, 1}, {5, 7}, {6, 2}, {7, 4}, {10, 9}}, 5, 4)); // Output: 14
        System.out.println(solution.maxFruits(new int[][]{{0, 3}, {6, 4}, {8, 5}}, 3, 2)); // Output: 0
    }
}
Editor is loading...
Leave a Comment