首页 > 其他分享 >【LC】2875. 无限数组的最短子数组

【LC】2875. 无限数组的最短子数组

时间:2023-10-11 12:00:33浏览次数:43  
标签:return LC 2875 int target% 数组 a2 prefixSums ans

Link

题意

见题链。

思路

自己没想出来。参考灵神题解取思路。自己写出来的。没有用滑动窗口用了前缀和。

代码

package main

func minSizeSubarray(a []int, target int) int {
	n := len(a)
	var a2 []int
	a2 = append(a2, a...)
	a2 = append(a2, a...)
	prefixSums := make([]int, n*2+1)
	for i := 0; i < 2*n; i++ {
		prefixSums[i+1] = prefixSums[i] + a2[i]
	}
	s := prefixSums[n]
	if target%s == 0 {
		// 注意特判,不然 target%s == 0 的时候会输出-1
		return n * (target / s)
	}
	m := make(map[int]int)
	ans := int(2e9)
	for i := 0; i < 2*n; i++ {
		if idx, ok := m[prefixSums[i+1]-target%s]; ok {
			ans = min(ans, i-idx+target/s*n)
		}
		m[prefixSums[i+1]] = i
	}
	if ans == int(2e9) {
		return -1
	}
	return ans
}

func min[T ~int | ~int64 | ~string](a, b T) T {
	if a < b {
		return a
	}
	return b
}

标签:return,LC,2875,int,target%,数组,a2,prefixSums,ans
From: https://www.cnblogs.com/TimusGo/p/17756759.html

相关文章

  • vscode交叉编译cmake工程,toolchains设置
    在VisualStudioCode中编译CMake项目时,使用自定义工具链(toolchains)可以很有用,特别是当你需要交叉编译或使用不同的编译器时。以下是在VisualStudioCode中使用自定义工具链的一般步骤,以aarch64的嵌入式为例:创建自定义工具链文件:首先,你需要创建一个包含有关你的自定义工具链......
  • SQLAlchemy学习-13.分页查询'Query' object has no attribute 'paginate'
    前言用过Flask-SQLAlchemy的应该知道,它提供了一个分页查询方法paginate(),方便我们实现在后端查询分页。但是单独使用SQLAlchemy却没有paginate方法,会报错:AttributeError:'Query'objecthasnoattribute'paginate'SQLAlchemy没有paginate方法Flask-SQLAlchemy分页查询参......
  • 记录python语言的数组去重并输出
    deffind_duplicates(arr):seen=set()duplicates=[]fornuminarr:ifnuminseen:duplicates.append(num)seen.add(num)returnduplicatesarr=['1000223453','1000227458','1000223......
  • SQLAlchemy学习-12.查询之 order_by 按desc 降序排序
    前言sqlalchemy的query默认是按id升序进行排序的,当我们需要按某个字段降序排序,就需要用到order_by。order_by排序默认情况下sqlalchemy的query默认是按id升序进行排序的res=session.query(Project).all()print(res)#[<Project(id='1',project_name='string'.........
  • day 1 数组 704.二分查找、27.移除元素
    704.二分查找题目链接:704.二分查找视频教程文章教程思路利用middle去寻找target前提条件:这道题目的前提是数组为有序数组,同时题目还强调数组中无重复元素,因为一旦有重复元素,二分查找法返回的元素下标可能就不唯一,这些都是二分法的前提,以后看到题目描述后可以先想一想......
  • 【C++ Primer】字符串和数组
    一、命名空间的using声明1、using声明:usingnamespace::name,例如:usingstd::cin。一旦声明了上述语句,就可以直接访问命名空间的变量。每个变量都需要using声明,位于头文件中的代码不应该使用using声明。2、using编译:usingnamespacestd;直接使用整个命名空间。使用using声明比使用us......
  • 数组、对象等常用操作
    1数组常用操作1.1添加元素arr.push()到数组的最后arr.push()从后面添加元素,返回添加后的数组的长度letarr=[1,2,3]//返回新的数组的长度4console.log(arr.push(4))//新的数组为:[1,2,3,4]console.log(arr)1.2添加元素arr.unshift()到数组最前面arr.u......
  • halcon相关
    halcon相关的内容halcon中用到的一些3D算子halcon中的聚类分割速度很快,相较于pcl中的算法起码加速50倍。70万的点云,halcon1mm聚类分割时间是30ms,pcl使用快速欧式聚类时间也是300ms,普通欧式聚类3000mshalcon中用到的3D算子......
  • 8种品牌PLC单片机使用Socket编程实现以太网开放式通信服务器视频教程
    8种品牌PLC单片机使用Socket编程实现以太网开放式通信服务器视频教程一、罗克韦尔ABMicro850系列PLC实现ModbusTCP以太网通信协议​服务器视频教程:罗克韦尔ABMicro850系列PLC做ModbusTCP以太网通信服务器、以太网调试助手和ModbusPoll调试助手做ModbusTCP以太网通信客户端,......
  • 复习课14 初识数组
    一.问题导入现需要编写一个程序,程序需要有26个变量,每一个变量都需要存储一个整型数字,所以我们需要将代码写成如下形式:intmain(void){inta=1;intb=2;intc=3;……………intz=26;return0;}我们很快就会发现这样写的弊端:1.代码冗杂重复2.无法使用循......