📌  相关文章
📜  Java程序计算数组元素的数量大于其左侧的所有元素并且其右侧至少有K个元素(1)

📅  最后修改于: 2023-12-03 15:32:05.706000             🧑  作者: Mango

Java程序计算数组元素的数量大于其左侧的所有元素并且其右侧至少有K个元素

这个问题可以用数组遍历,查找每个元素是否大于其左侧所有元素加起来的和,并且其右侧至少有K个元素,如果满足条件,则计数器加1。

public static int countSpecialElements(int[] arr, int k) {
    int count = 0;
    for (int i = 0; i < arr.length; i++) {
        int sum = 0;
        for (int j = 0; j < i; j++) {
            sum += arr[j];
        }
        if (arr[i] > sum && arr.length - i - 1 >= k) {
            count++;
        }
    }
    return count;
}

上面的程序使用了两个循环,时间复杂度为O(n^2)。可以使用前缀和的方法计算左侧所有元素加起来的和,将时间复杂度优化到O(n)。

public static int countSpecialElements(int[] arr, int k) {
    int count = 0;
    int[] prefixSum = new int[arr.length];
    prefixSum[0] = arr[0];
    for (int i = 1; i < arr.length; i++) {
        prefixSum[i] = prefixSum[i - 1] + arr[i];
    }
    for (int i = 0; i < arr.length; i++) {
        int sum = i == 0 ? 0 : prefixSum[i - 1];
        if (arr[i] > sum && arr.length - i - 1 >= k) {
            count++;
        }
    }
    return count;
}

上面的程序使用了一个for循环计算前缀和,时间复杂度为O(n)。然后遍历整个数组,用前缀和计算左侧所有元素加起来的和,判断是否满足条件,计数器加1。