​力扣解法汇总1590. 使数组和能被 P 整除

news/2024/7/5 4:25:36

 目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣


描述:

给你一个正整数数组 nums,请你移除 最短 子数组(可以为 ),使得剩余元素的  能被 p 整除。 不允许 将整个数组都移除。

请你返回你需要移除的最短子数组的长度,如果无法满足题目要求,返回 -1 。

子数组 定义为原数组中连续的一组元素。

示例 1:

输入:nums = [3,1,4,2], p = 6
输出:1
解释:nums 中元素和为 10,不能被 p 整除。我们可以移除子数组 [4] ,剩余元素的和为 6 。

示例 2:

输入:nums = [6,3,5,2], p = 9
输出:2
解释:我们无法移除任何一个元素使得和被 9 整除,最优方案是移除子数组 [5,2] ,剩余元素为 [6,3],和为 9 。

示例 3:

输入:nums = [1,2,3], p = 3
输出:0
解释:和恰好为 6 ,已经能被 3 整除了。所以我们不需要移除任何元素。

示例  4:

输入:nums = [1,2,3], p = 7
输出:-1
解释:没有任何方案使得移除子数组后剩余元素的和被 7 整除。

示例 5:

输入:nums = [1000000000,1000000000,1000000000], p = 3
输出:0

提示:

  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 109
  • 1 <= p <= 109

解题思路:

* 解题思路:
* 我的解法还是比较差的一种,时间复杂度达到了O(n2)。
* 首先求出diff值,为总和和p的余数,
* 然后使用前缀和,分别求长度为1,2,3,4的子数组,
* 求子数组的值,看是否有满足diff == (i1 % p)的

代码:

public class Solution1590 {

    public int minSubarray(int[] nums, int p) {
        int length = nums.length;
        long[] prifixSum = new long[length + 1];
        prifixSum[0] = 0;
        for (int i = 0; i < nums.length; i++) {
            int value = nums[i];
            prifixSum[i + 1] = prifixSum[i] + value;
        }
        if (p > prifixSum[length]) {
            return -1;
        }
        if (prifixSum[length] % p == 0) {
            return 0;
        }
        long diff = prifixSum[length] % p;

        for (int i = 1; i < length; i++) {
            for (int index = i; index <= length; index++) {
                long i1 = prifixSum[index] - prifixSum[index - i];
                if (diff == (i1 % p)) {
                    return i;
                }
            }
        }
        return -1;
    }
}


http://lihuaxi.xjx100.cn/news/978128.html

相关文章

vscode下载与使用

1.vscode下载 官网下载地址&#xff1a;Download Visual Studio Code - Mac, Linux, Windows下载太慢&#xff0c;推荐文章&#xff1a;解决VsCode下载慢问题_vscode下载太慢_迷小圈的博客-CSDN博客下载太慢&#xff0c;推荐下载链接&#xff1a;https://vscode.cdn.azure.cn/s…

玩转金山文档 3分钟让你的文档智能化

在上个月底&#xff0c;我们给大家推荐了金山轻维表的几个使用场景&#xff0c;社群中不少用户反响很好&#xff0c;对其中一些场景的解决方案十分感兴趣。但也有一些人表示&#xff0c;有些场景不知道如何实现&#xff0c;希望我们能提供模版/教程。这次我们将做一期热门模板盘…

5.2 对射式红外传感器旋转编码器计次

对射式红外传感器1.1 接线图VCC GND分别接电源的正负极DO数字输出端&#xff0c;随意选择一个GPIO口1.2 硬件原理当挡光片或者编码盘在对射式红外传感器中间经过时&#xff0c;DO就会输出电平变化信号&#xff0c;电平跳变信号触发STM32 PB14号口中断&#xff0c;在中断函数中执…

mysql死锁 gap next key 加锁分析

这个案例的原文参见&#xff1a; mysql死锁场景汇总整理_死锁业务场景_秃了也弱了。的博客-CSDN博客 那么我们就来分析下整个加锁过程吧。 关键词&#xff1a; next-key & gap 锁 & 插入意向锁 & 二级普通索引 前提&#xff1a;RR级别 CREATE TABLE t_user ( id…

【蓝桥杯集训·每日一题】AcWing 3555. 二叉树

文章目录一、题目1、原题链接2、题目描述二、解题报告1、思路分析2、时间复杂度3、代码详解三、知识风暴最近公共祖先一、题目 1、原题链接 3555. 二叉树 2、题目描述 给定一个 n 个结点&#xff08;编号 1∼n&#xff09;构成的二叉树&#xff0c;其根结点为 1 号点。 进行 m…

基于ChatRWKV智能问答和内容创作

ChatRWKV是对标ChatGPT的开源项目,希望做大规模语言模型的Stable Diffusion,测试很一段时间确实很像ChatGPT,从使用方法和内容结果上都很相似,但是还有一些差异。 文章目录 准备工作环境配置创建虚拟环境激活虚拟环境pip安装匹配版本ChatRWKV 使用模型替换常用参数设置使用…

【springmvc】执行流程

SpringMVC执行流程 原理图 1、SpringMVC常用组件 DispatcherServlet&#xff1a;前端控制器&#xff0c;不需要工程师开发&#xff0c;由框架提供 作用&#xff1a;统一处理请求和响应&#xff0c;整个流程控制的中心&#xff0c;由它调用其它组件处理用户的请求 HandlerMa…

< JavaScript小技巧:Array构造函数妙用 >

文章目录&#x1f449; Array构造函数 - 基本概念&#x1f449; Array函数技巧用法1. Array.of()2. Array.from()3. Array.reduce()4. (Array | String).includes()5. Array.at()6. Array.flat()7. Array.findIndex()&#x1f4c3; 参考文献往期内容 &#x1f4a8;今天这篇文章…