2024-07-13:用go语言,给定一个从0开始的长度为n的整数数组nums和一个从0开始的长度为m的整数数组pattern,其中pattern数组仅包含整数-1、0和1。

一个子数组nums[i..j]的大小为m+1,如果满足以下条件,则我们称该子数组与模式数组pattern匹配:

1.若pattern[k]为1,则nums[i+k+1] > nums[i+k];

2.若pattern[k]为0,则nums[i+k+1] == nums[i+k];

3.若pattern[k]为-1,则nums[i+k+1] < nums[i+k]。

需要计算匹配模式数组pattern的nums子数组的数量并返回。

输入:nums = [1,2,3,4,5,6], pattern = [1,1]。

输出:4。

解释:模式 [1,1] 说明我们要找的子数组是长度为 3 且严格上升的。在数组 nums 中,子数组 [1,2,3] ,[2,3,4] ,[3,4,5] 和 [4,5,6] 都匹配这个模式。

所以 nums 中总共有 4 个子数组匹配这个模式。

答案2024-07-13:

chatgpt

题目来自leetcode3036。

大体步骤如下:

1.在主函数main中,定义了一个nums数组为[1,2,3,4,5,6]和一个模式数组pattern为[1,1]。然后调用countMatchingSubarrays函数,并输出结果。

2.countMatchingSubarrays函数的作用是计算匹配模式数组pattern的nums子数组的数量。它首先将模式数组pattern的长度赋值给m,然后在模式数组末尾添加一个值为2的元素。接着遍历nums数组,将每相邻两个数的大小关系转换为-1、0或1,并存储在pattern数组中。

3.根据Z算法,创建一个数组z用于存储匹配长度。然后利用两个指针l和r,以及i遍历模式数组,并根据当前位置i和匹配长度z[i]更新l、r和z[i]的值,直到找到所有的匹配长度。

4.最后,在z数组中,从第m+1个值开始遍历,如果匹配长度等于模式数组长度m,则将计数器ans加一。

综上所述,总的时间复杂度为O(n)(n为nums数组的长度),总的额外空间复杂度为O(n)。

Go完整代码如下:

package main

import (
"fmt"
"cmp"
) func countMatchingSubarrays(nums, pattern []int) (ans int) {
m := len(pattern)
pattern = append(pattern, 2)
for i := 1; i < len(nums); i++ {
pattern = append(pattern, cmp.Compare(nums[i], nums[i-1]))
} n := len(pattern)
z := make([]int, n)
l, r := 0, 0
for i := 1; i < n; i++ {
if i <= r {
z[i] = min(z[i-l], r-i+1)
}
for i+z[i] < n && pattern[z[i]] == pattern[i+z[i]] {
l, r = i, i+z[i]
z[i]++
}
} for _, lcp := range z[m+1:] {
if lcp == m {
ans++
}
}
return
} func main() {
nums := []int{1,2,3,4,5,6}
pattern := []int{1,1}
fmt.Println(countMatchingSubarrays(nums,pattern))
}

2024-07-13:用go语言,给定一个从0开始的长度为n的整数数组nums和一个从0开始的长度为m的整数数组pattern,其中pattern数组仅包含整数-1、0和1。 一个子数组nums[i.的更多相关文章

  1. 刷题之给定一个整数数组 nums 和一个目标值 taget,请你在该数组中找出和为目标值的那 两个 整数

    今天下午,看了一会github,想刷个题呢,就翻出来了刷点题提高自己的实际中的解决问题的能力,在面试的过程中,我们发现,其实很多时候,面试官 给我们的题,其实也是有一定的随机性的,所以我们要多刷更多的 ...

  2. 给定一个整数数组 nums 和一个目标值 target,求nums和为target的两个数的下表

    这个是来自力扣上的一道c++算法题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案 ...

  3. 给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。

    /** * 给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标. * * 你可以假设每种输入只会对应一个答案.但是,数组中 ...

  4. 风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,

    转自:http://www.cnblogs.com/ranranblog/p/5845010.html 风口之下,猪都能飞.当今中国股市牛市,真可谓“错过等七年”. 给你一个回顾历史的机会,已知一支股 ...

  5. 【C语言】在两个数成对出现的数组中找到一个单独的数。

    //在两个数成对出现的数组中找到一个单独的数.比如{1,2,3.3,1,4.2},即找出4 #include <stdio.h> int find(int arr[], int len) ...

  6. 输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)

    我没有实现时间复杂度为O(n)的算法. 思路:从第一数开始,onelist[0]:onelist[0]+onelist[1]:这样依次推算出每个子数组的sum值.和max进行比较.最后得到max值. ...

  7. [jstips]向数组中插入一个元素

    向现有数组中插入一个元素是经常会见到的一个需求.你可以: 使用push将元素插入到数组的尾部: 使用unshift将元素插入到数组的头部: 使用splice将元素插入到数组的中间: 上面那些方法都是常 ...

  8. C#如何删除数组中的一个元素

    C#如何删除数组中的一个元素,剩余的元素组成新数组,数组名不变double[] arr = new double[n];需要删除的是第m+1个数据arr[m]求新数组arr.(新数组arr包含n-1个 ...

  9. js数组合并(一个数组添加到另一个数组里面)方法

    js定义两个数组. var arrA=[1,2,3]; var arrB=[4,5,6]; 要实现[1,2,3,4,5,6],如果直接arrA.push(arrB); 则arrB只会作为了arrA的一 ...

  10. 七、如何在Java中高效检查一个数组是否含有一个值

    如何检查一个数组(非排序的)是否包含特定的值.这是个非常有用或经常被在Java中使用.这是个在Stack Overflow中高得票的问题.在已经高得票的答案中,有许多不同的处理方法,但是时间的复杂度非 ...

随机推荐

  1. 基于Python实现MapReduce

    一.什么是MapReduce 首先,将这个单词分解为Map.Reduce. Map阶段:在这个阶段,输入数据集被分割成小块,并由多个Map任务处理.每个Map任务将输入数据映射为一系列(key, va ...

  2. 基于webapi的websocket聊天室(番外一)

    上一篇我已经实现了聊天室,并且在协议中实现了4种类型的消息传输.其实还可以添加video,audio,live等等类型. 不过假如把目前的协议看作RCP1.0版的话,这个版本就只支持有限的4种消息.精 ...

  3. Stenciljs 学习之搭建项目

    框架介绍 stenciljs 是用于构建可重用.可扩展的设计系统的工具链.生成在每个浏览器中运行的小型.超快且 100% 基于标准的 Web Component. 更对介绍请参考官方网站 创建项目 使 ...

  4. 解密Prompt系列29. LLM Agent之真实世界海量API解决方案:ToolLLM & AnyTool

    很早之前我们就聊过ToolFormer,Gorilla这类API调用的Agent范式,这一章我们针对真实世界中工具调用的以下几个问题,介绍微调(ToolLLM)和prompt(AnyTool)两种方案 ...

  5. ChatGPT-4o模型功能介绍

    1.概述 OpenAI 持续突破人工智能的边界,推出了其最新模型 ChatGPT-4o,作为 ChatGPT-4 的继承者,该模型有望带来显著的提升和创新功能.本文将深入解析 ChatGPT-4 与 ...

  6. 必应每日一图url(可直接使用)

    必应每日一图url 首先放出地址,后面是一堆心路历程(一堆废话),只为链接的可以不用看 https://baotangguo.cn:8081/ 最初 ​ 博客园装饰的时候(虽然是抄的),想着上面背景图 ...

  7. 2024盘古石取证比赛(IPA+人工智能)

    前言 题目列表 IPA部分 1. 分析毛雪柳的手机检材,记账 APP 存储记账信息的数据库文件名称是: [ 答案格式:tmp.db ,区分大小写 ][ ★★★★☆ ] 通过icost软件可以定位rae ...

  8. Yii 实现数据库SUM操作

    方法一:这种方法有个坑儿,就是as 后面的别名,必须是属性范围内的名字. $criteria = new CDbCriteria(); $criteria->select = 'sum(amou ...

  9. 【Effective C++】设计与声明——reference篇

    以pass-by-reference-to-const替换pass-by-value 缺省情况下C++以by value方式传递对象至(或来自)函数.除非你另外指定,否则函数参数都是以实际实参的复件( ...

  10. python安装OCR识别库

    (1)安装过程 参考的这个博客:https://blog.csdn.net/lanxianghua/article/details/100516187?depth_1-utm_source=distr ...