力扣算法11——寻找数组的中心下标

本文介绍了一段Java代码,展示了如何通过Stream API计算数组中元素累加和等于总和的索引。`pivotIndex`方法遍历数组,当累加和等于总和时返回当前索引。如果未找到这样的索引,则返回-1。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码实现:

package datasSouce;

import java.util.Arrays;

public class ArrayCenterIndex {
    public static void main(String[] args) {
        System.out.println(pivotIndex(new int[]{1,7,3,6,5,6}));
    }

    private static int pivotIndex(int[] arr) {
        //求出数组的总和
        int sum = Arrays.stream(arr).sum();
        //初始一个变量
        int total = 0;
        for (int i = 0; i < arr.length; i++) {
            //使total从做开始加
            total += arr[i];
            //判断total和sum
            if (total == sum){
                return i;
            }
            sum = sum - arr[i];
        }
        return -1;
    }
}

### 关于滑动窗口最大值问题的解法 对于给定的一个整数数组 `nums` 和一个大小为 `k` 的滑动窗口,目标是从左至右遍历该数组并记录每一个滑动窗口中的最大值。一种直观的方法是通过暴力求解来获取每个窗口的最大值,然而这种方法的时间复杂度较高,达到 O((n - k + 1) * k)[^1]。 为了提高效率,可以采用更优的数据结构——单调队列来进行处理。单调队列是一种特殊的双端队列,在这里用于存储当前窗口内元素下标的集合,并保持这些下标对应的数值按降序排列[^4]。具体来说: - 当新元素进入窗口时,移除队列中所有小于等于它的元素(因为它们不可能成为后续任何窗口的最大值),再将新的元素加入到队尾; - 如果队首元素已经不在当前窗口范围内,则将其弹出; - 此时队首即为当前窗口的最大值所在位置; 下面给出基于上述逻辑的具体 Python 实现方式: ```python from collections import deque def maxSlidingWindow(nums, k): result = [] window = deque() for i in range(len(nums)): # 移除不在当前窗口范围内的索引 if window and window[0] <= i - k: window.popleft() # 维护单调递减性质 while window and nums[i] >= nums[window[-1]]: window.pop() window.append(i) # 记录结果 if i >= k - 1: result.append(nums[window[0]]) return result ``` 此算法能够在线性时间内完成计算,时间复杂度降低到了 O(n),极大地提高了程序运行效率[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值