首页 > 其他分享 >3255. 长度为 K 的子数组的能量值 II

3255. 长度为 K 的子数组的能量值 II

时间:2024-11-10 09:43:44浏览次数:3  
标签:cnt nums int 复杂度 3255 II 数组 ans

文章目录

问题描述

  • 给你一个长度为 n 的整数数组 nums 和一个正整数 k 。

  • 一个数组的 能量值 定义为:

  • 如果 所有 元素都是依次 连续 且 上升 的,那么能量值为 最大 的元素。

  • 否则为 -1 。

  • 你需要求出 nums 中所有长度为 k 的子数组的能量值。

  • 请你返回一个长度为 n - k + 1 的整数数组 results ,其中 results[i] 是子数组 nums[i…(i + k - 1)] 的能量值。

解题思路

  • 找连续上升的段。如果段长至少是 k,那么这段中的所有长为 k 的子数组都是符合要求的,子数组的最后一个元素是最大的。

  • 具体来说,遍历数组的同时,用一个计数器 cnt 统计连续递增的元素个数:

  • 初始化 cnt=0。

  • 如果 i=0 或者 nums[i]=nums[i−1]+1,把 cnt 增加 1;否则,把 cnt 置为 1。

  • 如果发现 cnt≥k,那么下标从 i−k+1 到 i 的这个子数组的能量值为 nums[i],即 ans[i−k+1]=nums[i]。

代码示例

class Solution {
    public int[] resultsArray(int[] nums, int k) {
        int[] ans = new int[nums.length - k + 1];
        Arrays.fill(ans, -1);
        int cnt = 0;
        for (int i = 0; i < nums.length; i++) {
            cnt = i == 0 || nums[i] == nums[i - 1] + 1 ? cnt + 1 : 1;
            if (cnt >= k) {
                ans[i - k + 1] = nums[i];
            }
        }
        return ans;
    }
}

复杂度分析

  • 时间复杂度:O(n),其中 n 是 nums 的长度。
  • 空间复杂度:O(1)。返回值不计入。

标签:cnt,nums,int,复杂度,3255,II,数组,ans
From: https://blog.csdn.net/ysw234567/article/details/143588554

相关文章

  • c中柔性数组
    c99中,结构中最后一个元素允许是未知大小的数组,这就叫柔性数组成员。柔性数组的特点1.结构中柔性数组前必须至少有一个其他成员2.sizeof返回的这种结构大小不包括柔性数组的内存3.包含柔性数组成员的结构用malloc函数进行动态分配,并且分配的内存应该大于结构的大小,以适应柔......
  • 树状数组learning Day1识海社区打卡1st
    鉴于上次省赛的惨烈失败教训,狠狠加训,距离下次沈阳站还有两星期,再次感谢东北大学赐予的外卡机会,你知道的,东北大学一直是我的第二户籍所在地。今天到下星期周末为止估计都会持续更新树状数组和线段树相关的笔记。我的刷题顺序大概会按照[灵神提单](LC-Rating&Training)->codefor......
  • Java入门程序之一维数组的基础运用
    Java入门程序之一维数组的基础运用​本文详细介绍了Java中数组的概念、创建与初始化、一维数组的使用、内存分布以及二维数组。讲解了数组的静态与动态初始化、元素访问与修改、遍历方式。一、数组的基本概念数组的初始化例如:int[]array1=newint[20];//创建一个......
  • AcWing 827:双链表 ← 数组模拟
    【题目来源】https://www.acwing.com/problem/content/829/【题目描述】实现一个双链表,双链表初始为空,支持5种操作:  ●在最左侧插入一个数;  ●在最右侧插入一个数;  ●将第k个插入的数删除;  ●在第k个插入的数左侧插入一个数;  ●在第k个......
  • SS241109B. tii(tii)
    SS241109B.tii(tii)题意给你一个\(01\)序列,长度为\(n\le5\times10^5\)。给你一个小数\(p\),要你找出一个区间满足区间\(1\)的个数比区间长度和\(p\)最接近,输出区间的左端点,如果有多个区间输出左端点最小的那个。思路设\(s\)是原序列的前缀和数组,翻译一下题面就是求......
  • 二维数组和数组指针数组的关系
    在深入理解指针end中,我在最后写了一长段代码#include<stdio.h>voidtest1(intarr[][5],intx,inty)//voidtest1(int(*p)[5],intx,inty){ for(inti=0;i<x;i++) { for(intj=0;j<y;j++) { //printf("%d",*(*(p+i)+j)); print......
  • 【数据结构】快慢指针探秘:理解链表与数组中的环结构
    在处理链表或数组时,我们经常需要在一次遍历中找到特定的位置或检测某种模式。这时,快慢指针技术就能成为强大的工具,尤其在链表面试题中。本文将详细介绍什么是快慢指针、它们的工作原理,并通过一些实际应用帮助你理解这种技巧。学完后,你将掌握这种技巧的核心以及如何在代码中......
  • Air780E软件指南:C语言内存数组(zbuff)
    一、ZBUFF(C内存数组)简介zbuff库可以用c风格直接操作(下标从0开始),例如buff[0]=buff[3]可以在sram上或者psram上申请空间,也可以自动申请(如存在psram则在psram进行申请,如不存在或失败则在sram进行申请)。操作里面的元素时,可以根据光标进行增删改查。偏移方式有三种:从头......
  • 【华为OD技术面试手撕真题】82、环形链表II | 手撕真题+思路参考+代码解析(C & C++ & J
    文章目录一、题目......
  • 面向对象基础(2)对象数组、重载与可变个数形参
    3、对象数组数组的元素可以是基本数据类型,也可以是引用数据类型。当元素是引用类型中的类时,我们称为对象数组。案例;定义类Student,包含三个属性:学号number(int),年级state(int),成绩score(int)。创建20个学生对象,学号为1到20,年级和成绩都由随机数确定。问题一:打印出4年级(gra......