美文网首页
【算法题】1590. 使数组和能被 P 整除

【算法题】1590. 使数组和能被 P 整除

作者: 程序员小2 | 来源:发表于2023-01-19 11:21 被阅读0次

插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
坚持不懈,越努力越幸运,大家一起学习鸭~~~

题目:

给你一个正整数数组 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 <= 10^5
1 <= nums[i] <= 10^9
1 <= p <= 10^9

java代码:

class Solution {
    public int minSubarray(int[] nums, int p) {
        int mod = 0;
        for (int num : nums) {
            mod = (mod + num) % p;
        }
        if (mod == 0) {
            return 0;
        }
        int ans = Integer.MAX_VALUE;
        Map<Integer, Integer> map = new HashMap<>();
        map.put(0, -1);
        for (int i = 0, sum = 0; i < nums.length; i++) {
            sum = (sum + nums[i]) % p;
            int find = (sum - mod + p) % p;
            if (map.containsKey(find)) {
                ans = Math.min(ans, i - map.get(find));
            }
            map.put(sum, i);
        }
        return ans == Integer.MAX_VALUE || ans == nums.length ? -1 : ans;
    }
}

相关文章

  • 【算法题】1590. 使数组和能被 P 整除

    插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。[http...

  • 程序题

    求两个正整数的最大公约数 数组反转 闰年: 能被4整除且不能被100整除 或者 能被400整除

  • 【7】整除性与余数

    定义7.1 是整数,若存在整数使,则称整数能整除整数,或称能被整除,记作:。否则,称整数不能整除整数,或称不能被整...

  • 判断闰年?-c语言描述

    闰年:1、能被4整除,但不能被100整除 2、能被100整除,且能被400整除 ``` #includ...

  • 判断闰年

    能被4整除但不能被100整除或者能被400整除

  • 闰年

    能被4整除并且不能被一百整除或者能被四百整除

  • Python入门练习题 4/2 - 整除

    第4题:整除 难度系书:** 接受用户输入一个整数,列出能被该整数整除的所有数。 知识点 整除 期待你的答案 !!!

  • 怎样快速判断一个数能被2,3等整除

    先来结论:被2整除的条件,尾数是偶数;被3整除的条件,各位数之和能被3整除;被4整除的条件,末两位数能被4整除;被...

  • ES6常见的数组方法

    一:数组方法filter(过滤) 1:过滤掉不能被3整除的数,打印出来能被整除的数 打印结果如下: 或者这样写,效...

  • 闰年判断

    闰年中2月29天 判断公式 同时满足三个条件:①能被4整除②不能被3200整除③能被400整除 或者 不能被100整除

网友评论

      本文标题:【算法题】1590. 使数组和能被 P 整除

      本文链接:https://www.haomeiwen.com/subject/bbqqhdtx.html