当前位置: 首页 > news >正文

【算法】【数组与矩阵模块】求最长可整合子数组和子数组的长度

目录

  • 前言
  • 问题介绍
  • 解决方案
  • 代码编写
    • java语言版本
    • c语言版本
    • c++语言版本
  • 思考感悟
  • 写在最后

前言

当前所有算法都使用测试用例运行过,但是不保证100%的测试用例,如果存在问题务必联系批评指正~

在此感谢左大神让我对算法有了新的感悟认识!

问题介绍

原问题
可整合数组定义:如果数组排序后,相邻元素之间差值为1的话,则该数组为可整合数组
给定一个数组arr,求arr中最长的可整合子数组。
如:5532643
返回53264,长度为5

解决方案

原问题
首先有个定律:相邻元素差值为1的话,该数组的最大值和最小值差值+1就应该是数组的长度
根据该定律遍历数组的所有子数组,每一轮检测数组最大值和最小值差值是否是当前数组长度,求出最长长度即可。

代码编写

java语言版本

原问题:

/*** 二轮测试:求代码可整合子数组的最长长度* 可整合数组定义:对数组排序后,数组中每相邻两个数之间的差值为1* @param arr* @return*/public static Record getLILCp1(int[] arr) {if (arr == null || arr.length == 0) {return null;}Record record = new Record();int min;int max;// 用来判重Set<Integer> set = new HashSet<>();// 遍历每一个子数组for (int i = 0; i < arr.length; i++) {// 每一轮需要清空最值min = arr[0];max = arr[0];set.clear();for (int j = i; j < arr.length; j++) {// 子数组为[i...j],先计算最值// 更新当前子数组的最大值或最小值max = Math.max(max, arr[j]);min  = Math.min(min, arr[j]);// 计算当前子数组是否是可整合数组if (set.contains(arr[j])) {// 从j开始存在重复的,直接下一轮break;}else if (max - min + 1 == j - i + 1) {// 值域 == 长度if (j - i + 1 > record.len) {record.setLen(j - i + 1);record.setArr(Arrays.copyOfRange(arr, i, j+1));}set.add(arr[j]);}}}return record;}/*** 存储最长子数组长度和对应子数组的实体类*/static class Record {private int len;private int[] arr;public int getLen() {return len;}public void setLen(int len) {this.len = len;}public int[] getArr() {return arr;}public void setArr(int[] arr) {this.arr = arr;}@Overridepublic String toString() {return "Record{" +"len=" + len +", arr=" + Arrays.toString(arr) +'}';}}public static void main(String[] args) {System.out.println(getLILCp1(new int[]{5,5,3,2,6,4,3}));}

c语言版本

正在学习中

c++语言版本

正在学习中

思考感悟

这道题给我两个启发:
首先求符合要求的子数组类型的问题一定能够通过暴力解决
符合要求的子数组可以通过暴力算法遍历每一个子数组,这道题我一开始往最优解上想的时候,根本没有考虑过使用暴力遍历每一个子数组,虽然可能大多数题目都不会这么写,但是不代表所有的题最优解不会遍历所有子数组。
其次长度和最值差值之间的关系需要记牢
相差1可以用长度等于最值差值这个定律在我刚开始接触算法的时候可能没有想到过,但是数组计数算法也有相似的启发,有时候我们可以多想想数组的index和实际的值有时候是否存在微妙的关联是很重要的。

写在最后

方案和代码仅提供学习和思考使用,切勿随意滥用!如有错误和不合理的地方,务必批评指正~
如果需要git源码可邮件给2260755767@qq.com
再次感谢左大神对我算法的指点迷津!

相关文章:

【算法】【数组与矩阵模块】求最长可整合子数组和子数组的长度

目录前言问题介绍解决方案代码编写java语言版本c语言版本c语言版本思考感悟写在最后前言 当前所有算法都使用测试用例运行过&#xff0c;但是不保证100%的测试用例&#xff0c;如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识&#xff01; 问题介绍 …...

数据结构:循环队列的实现(leetcode622.设计循环队列)

目录 一.循环队列简单介绍 二.用静态数组实现循环队列 1.数组循环队列结构设计 2.数组循环队列的堆区内存申请接口 3.数据出队和入队的接口实现 4.其他操作接口 5.数组循环队列的实现代码总览 三.静态单向循环链表实现循环队列 1.链表循环队列的结构设计 2.创建静…...

[qiankun]实战问题汇总

[qiankun]实战问题汇总ERROR SyntaxError: Cannot use import statement outside a module问题分析解决方案子应用命名问题问题分析解决方案jsonpFunction详细错误信息问题分析解决方案微应用的注册问题Uncaught Error: application cli5-beta6-test-name died in status LOADI…...

Kafka(6):服务端常用参数配置

参数配置&#xff1a;config/server.properties # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership.…...

2023爱分析·云原生智能运维中台市场厂商评估报告:秒云(miaoyun.io)

目录 1. 研究范围定义 2. 云原生智能运维中台市场定义 3. 厂商评估&#xff1a;秒云&#xff08;miaoyun.io&#xff09; 4. 入选证书 1. 研究范围定义 数字化时代&#xff0c;应用成为企业开展各项业务的落脚点。随着业务的快速发展&#xff0c;应用的功能迭代变得越…...

hadoop容器化部署

1、原容器 java:openjdk-8u111-jre jre路径&#xff1a; /usr/lib/jvm/java-8-openjdk-amd64 /usr/lib/jvm/java-1.8.0-openjdk-amd64 2、安装ssh docker run -it --name hadoop-test java:openjdk-8u111-jre bash apt-get update apt-get install openssh service ssh start …...

【07-JVM面试专题-JVM运行时数据区的虚拟机栈你知道吗?它的基本结构是什么呢?你知道栈帧的结构吗?那你说说动态链接吧?】

JVM运行时数据区的虚拟机栈你知道吗&#xff1f;它的基本结构是什么呢&#xff1f;你知道栈帧的结构吗&#xff1f;那你说说动态链接吧&#xff1f; JVM运行时数据区的虚拟机栈你知道吗&#xff1f;它的基本结构是什么呢&#xff1f;你知道栈帧的结构吗&#xff1f;那你说说动态…...

Java性能优化-GC优化基础

GC优化基础 调整堆大小 如果在FULL GC系统进行了交换&#xff0c;停顿时间会增长几个数量级&#xff0c;OS 如果G1 GC和后台进程处理堆&#xff0c;将会出现等待数据从磁盘复制到主内存时间较长&#xff0c;速度和下降并且并发模式可能失效 linux 关闭交换区 swapoff -a linu…...

【Tomcat】IDEA编译Tomcat源码-手把手教程

一、环境准备Tomcat不同版本之间有一定的兼容性问题~如下图所示&#xff1a;官网地址&#xff1a;https://tomcat.apache.org/whichversion.html下载tomcat9官网上面的源码&#xff1a;这一篇文章主要是带着大家在自己的IDEA跑起来一个Tomcat。使用的版本是Tomcat9.0.55 和 JDK…...

如何弄小程序?公司企业可以这样做小程序

公司企业现在对于小程序的需求已经是刚需了&#xff0c;即使已经有官网的情况下&#xff0c;也会考虑再弄一个小程序来做小程序官网。那么公司企业如何弄小程序呢&#xff1f;下面跟大家说说方法。 流程一、找小程序服务商 由于一些公司企业并不像现在的互联网公司企业那样有…...

【Git】IDEA集合Git和码云

目录 7、IDEA集合Git 7.1 配置Git忽略文件-IDEA特定文件 7.2 定位 Git 程序 7.3 初始化本地库 7.4 添加到暂存区 7.5 提交到本地库 7.6 切换版本 7.7 创建分支 7.8 切换分支 7.9 合并分支 7.10 解决冲突 8、 Idea集成码云 8.1 IDEA 安装码云插件 8.2 分析工程到码…...

[USACO03FALL / HAOI2006] 受欢迎的牛 G(C++,强连通分量)

题目背景 本题测试数据已修复。 题目描述 每头奶牛都梦想成为牛棚里的明星。被所有奶牛喜欢的奶牛就是一头明星奶牛。所有奶牛都是自恋狂&#xff0c;每头奶牛总是喜欢自己的。奶牛之间的“喜欢”是可以传递的——如果 AAA 喜欢 BBB&#xff0c;BBB 喜欢 CCC&#xff0c;那么…...

Vue 动态路由接口数据结构化为符合VueRouter的声明结构及菜单导航结构、动态路由懒加载方法

Vue 动态路由接口数据结构化为符合VueRouter的声明结构及菜单导航结构、动态路由懒加载方法 实现目标 项目打包代码实现按需分割路由懒加载按需打包&#xff0c;排除引入子组件的冗余打包&#xff08;仅处理打包冗余现象&#xff0c;不影响生产部署&#xff09;解决路由懒加载…...

Python----------字符串

1.转义字符 注&#xff1a;转义字符放在你所想效果字符前 2.原始字符串 print(r"D:\three\two\one\now") ->D:\three\two\one\now注&#xff1a; 在使用原始字符串时&#xff0c;转义字符不再有效&#xff0c;只能当作原始的字符&#xff0c;每个字符都没有特殊…...

日志收集笔记(架构设计、Log4j2项目初始化、Lombok)

1 架构设计 ELK 技术栈架构设计图&#xff1a; 从左往右看&#xff0c; Beats&#xff1a;主要是使用 Filebeat&#xff0c;用于收集日志&#xff0c;将收集后的日志数据发送给 Kafka&#xff0c;充当 Kafka 的生产者Kafka&#xff1a;高性能消息队列&#xff0c;主要起缓冲…...

一文教你玩转 Apache Doris 分区分桶新功能|新版本揭秘

数据分片&#xff08;Sharding&#xff09;是分布式数据库分而治之 (Divide And Conquer) 这一设计思想的体现。过去的单机数据库在大数据量下往往面临存储和 IO 的限制&#xff0c;而分布式数据库则通过数据划分的规则&#xff0c;将数据打散分布至不同的机器或节点上&#xf…...

数据挖掘,计算机网络、操作系统刷题笔记54

数据挖掘&#xff0c;计算机网络、操作系统刷题笔记54 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;orac…...

将数组中的每个元素四舍五入到指定的精度numpy.rint()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 将数组中的每个元素 四舍五入到指定的精度 numpy.rint() 选择题 请问np.rint(a)的输出结果是? import numpy as np anp.array([-1.72,-1.3,0.37,2.4]) print("【显示】a&#xff1a;\n…...

Web安全之服务器端请求伪造(SSRF)类漏洞详解及预防

如何理解服务器端请求伪造&#xff08;SSRF&#xff09;类漏洞当服务器向用户提交的未被严格校验的URL发起请求的时候&#xff0c;就有可能会发生服务器端请求伪造&#xff08;SSRF&#xff0c;即Server-Side Request Forgery&#xff09;攻击。SSRF是由攻击者构造恶意请求URL&…...

LeetCode:239. 滑动窗口最大值

239. 滑动窗口最大值 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1&#xff1a; 输入&#xff1a;nums [1,3,-…...

LFM2.5-1.2B-Thinking-GGUF保姆级教程:Windows/Mac/Linux三平台本地部署

LFM2.5-1.2B-Thinking-GGUF保姆级教程&#xff1a;Windows/Mac/Linux三平台本地部署 1. 平台介绍 LFM2.5-1.2B-Thinking-GGUF是Liquid AI推出的一款轻量级文本生成模型&#xff0c;特别适合在资源有限的设备上快速部署和使用。这个模型采用了GGUF格式&#xff0c;配合llama.c…...

SEO排名推广软件如何选择_SEO排名推广软件如何监控排名

SEO排名推广软件如何选择 在当今数字营销的世界中&#xff0c;选择合适的SEO排名推广软件是每一个企业和个人网站成功的关键。无论你是初创企业还是已有一段时间在网络上站稳脚跟的品牌&#xff0c;了解如何选择SEO排名推广软件&#xff0c;并有效利用它们来提升你的网站排名&…...

Nanobot与Kubernetes集成:云原生部署方案

Nanobot与Kubernetes集成&#xff1a;云原生部署方案 1. 引言 在云原生时代&#xff0c;如何高效部署和管理AI应用成为开发者面临的重要挑战。Nanobot作为一个超轻量级的AI助手框架&#xff0c;以其仅4000行代码的精简设计和强大功能吸引了广泛关注。但当我们需要在生产环境中…...

Qwen3-14B私有镜像运维指南:监控、扩缩容与故障排查

Qwen3-14B私有镜像运维指南&#xff1a;监控、扩缩容与故障排查 1. 前言&#xff1a;为什么需要关注大模型运维 部署完Qwen3-14B只是第一步&#xff0c;真正的挑战在于如何让它稳定运行。不同于传统应用&#xff0c;大模型服务对资源需求高、故障模式特殊&#xff0c;需要一套…...

使用C#代码将 HTML 转换为 PDF、XPS 和 XML

HTML 是网页和在线内容的标准格式。然而&#xff0c;在许多场景中&#xff0c;您可能需要将 HTML 文档转换为其他文件格式&#xff0c;例如 PDF、XPS 和 XML。无论是想生成网页的可打印版本&#xff0c;将 HTML 内容以更通用的格式分享&#xff0c;还是从 HTML 中提取数据以便进…...

不止于裁剪:聊聊Vue3项目中头像处理的那些事儿(vue-cropper实战与优化思考)

Vue3头像裁剪进阶实战&#xff1a;从功能实现到工程化思维 开篇&#xff1a;为什么我们需要重新思考头像处理 在大多数Web应用中&#xff0c;用户头像处理似乎是个"简单"需求——上传图片、裁剪、保存。但当你深入细节时会发现&#xff0c;这个看似基础的功能背后隐…...

mysql如何限制查询结果_mysqllimit语句使用示例

LIMIT 必须放在整个 SELECT 语句的最后&#xff0c;严格位于 ORDER BY 和 GROUP BY 之后、WHERE 之后&#xff1b;写在 WHERE 或 ORDER BY 中间会报错。MySQL 的 LIMIT 用在 WHERE 之后还是 ORDER BY 之后&#xff1f;LIMIT 必须放在整个 SELECT 语句的最后&#xff0c;且严格位…...

CODROB_IOTBOT嵌入式机器人开发库详解

1. CODROB_IOTBOT 库概述与工程定位CODROB_IOTBOT 是面向教育场景的嵌入式机器人开发平台&#xff0c;其核心价值不在于追求极致性能&#xff0c;而在于构建“零布线、即插即用、教学友好”的硬件抽象层。该库并非通用型驱动框架&#xff0c;而是深度耦合于 IoTBOT 硬件设计的专…...

Coze 智能体开发标准流程

在 Coze&#xff08;扣子&#xff09;平台上开发 AI 智能体&#xff08;Agent&#xff09;的流程可以概括为 “创建 - 编排 - 调试 - 发布” 四个核心阶段。无论你是使用国内版 (coze.cn) 还是国际版 (coze.com)&#xff0c;其逻辑架构基本一致。1. 创建智能体 (Create)这是项目…...

效率神器:用快马AI将antigravity彩蛋变为你的趣味开发效率工具

今天想和大家分享一个提升开发效率的小技巧——把Python里经典的antigravity彩蛋变成日常开发的趣味工具。这个想法源于我发现很多开发者&#xff08;包括我自己&#xff09;在紧张的工作中容易陷入枯燥的重复劳动&#xff0c;而一些小小的趣味互动其实能有效缓解疲劳&#xff…...