首页 > 其他分享 >ZS_2461_长度为K子数组中的最大和

ZS_2461_长度为K子数组中的最大和

时间:2022-11-11 10:46:50浏览次数:50  
标签:map 2461 nums res sum 数组 value key ZS

思路

滑动窗口 + Map 维护元素出现次数, 然后遍历一遍即可求出答案

滑动窗口

滑动窗口是双指针的一种特例,任意时刻只有一个指针在运动,另一个指针静止,指针包含区域称为窗口,指针的运动即窗口的滑动

滑动窗口的时间复杂度是线性的,一般为O(n)。

滑动窗口一般用于解决特定的序列中符合条件的连续的子序列的问题。这个序列大多数是指数组或者字符串

Java-Map

Java集合类Map,Map集合类用于存储元素对( key : value ),每个键对映一个值,key值如果相等的话会把之前存放的值覆盖,其内部元素不会重复。

解法

    public long maximumSubarraySum(int[] nums, int k) {
        int len = nums.length;
        long res = 0, sum = 0;
        Map<Integer, Integer> map = new HashMap<>();
        //初始化Map和sum,避免最初的k个数中出现重复值
        for (int i = 0; i < k; i++) {
            sum += nums[i];
            map.put(nums[i], map.getOrDefault(nums[i], 0) + 1);
        }
        if (map.size() == k)
            res = Math.max(res, sum);
        for (int i = k; i < len; i++) {
            //右指针右移
            sum += nums[i];
            map.put(nums[i], map.getOrDefault(nums[i], 0) + 1);
            //左指针右移
            sum -= nums[i - k];
            int cnt = map.get(nums[i - k]);
            if (cnt == 1)
                map.remove(nums[i - k]);
            else
                map.put(nums[i - k], cnt - 1);
            if (map.size() == k) {
                res = Math.max(res, sum);
            }
        }
        return res;
    }

hashmap.put(K key, V value),插入操作,如果插入的key值已经存在?执行value替换操作,返回旧value值:不存在则执行插入操作,返回null

hashmap.getOrDefault(Object key, V defaultValue),返回key相映射value值,若给定的key无法找到则返回指定的默认值

hashmap.get(Object key),返回给定key相映射的value

标签:map,2461,nums,res,sum,数组,value,key,ZS
From: https://www.cnblogs.com/Pilo-pillow/p/16879775.html

相关文章

  • 学习笔记-Frida构造数组,对象,Map和类参数
    Frida构造数组,对象,Map和类参数数组/(字符串)对象数组/gson/Java.array对象/多态,强转Java.cast接口interface,Java.register枚举,泛型,List,Map,Set,迭代打印重要思路:开......
  • 数组还是HashSet?
    我记得大约在半年前,有个朋友问我一个问题,现在有一个选型:一个性能敏感场景,有一个集合,需要确定某一个元素在不在这个集合中,我是用数组直接Contains还是使用HashSet<T>.Cont......
  • 74 寻找数组的中心下标
    题目74寻找数组的中心下标给你一个整数数组nums,请计算数组的中心下标。数组中心下标是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果中......
  • C/C++:探究二维数组的数组名
    C/C++:探究二维数组的数组名与数组指针先提一嘴:一维数组的数组名对于一个一维数组而言,其数组名是该数组的首地址,也就是一个数组首元素的指针,如下:#include<stdio.h>int......
  • 560.和为k的子数组
    给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的连续子数组的个数 。示例1:输入:nums=[1,1,1],k=2输出:2示例2:输入:nums=[1,2,3......
  • 力扣 81. 搜索旋转排序数组 II
    81.搜索旋转排序数组II已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同。在传递给函数之前,nums 在预先未知的某个下标 k(0<=k<nums.leng......
  • 类内初始化数组
    1,问题:就是在类内定义了一个数组,但是我又不想用for循环一个个元素去初始化,于是我去网上寻找答案。2,网上大多数答案:在类内创建数组时选择static修饰,也就是将这个数组变为......
  • 941 有效的山脉数组
    题目941有效的山脉数组给定一个整数数组arr,如果它是有效的山脉数组就返回true,否则返回false。让我们回顾一下,如果arr满足下述条件,那么它是一个山脉数组:arr.leng......
  • 数组为函数参数
    1、数组引用作为函数形参,链接1)输入必须为10个元素!2)可以将数组定义为类型voidprint(int(&arr)[10]){for(autoi:arr){cout<<i<<endl;}}......
  • 不修改数组找出重复的数字
    14.不修改数组找出重复的数字题给定一个长度为n+1的数组nums,数组中所有的数均在1∼n的范围内,其中n≥1。请找出数组中任意一个重复的数,但不能修改输入的数组。数据......