入门力扣自学笔记245 C++ (题目编号:1590)
创始人
2024-05-31 21:29:53
0

1590. 使数组和能被 P 整除

题目:

给你一个正整数数组 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


来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/make-sum-divisible-by-p
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


思路:

这道题首先我们得了解两个概念:

1.x mod p = 0   ——————————>   (x-y) mod p = y mod p

2.(x-y) mod p = z   ——————————>   y mod p = (x-z) mod p

首先,我们先将所有元素加起来,往后跟p取余,如果等于0,那么证明这个不用删除元素,直接返回0即可。

其次,如果和p取余后不等于0,那么我们就将这个当做是一个目标余数,简单来说,就是我们找到最短的一个子序列,往后等于这个目标余数即可。

最后,代码使用了一个无序映射(unordered map),存储累加和除以 p 的余数和对应的下标。代码通过遍历数组,累加数组元素,计算当前累加和减去目标余数再加上 p 的余数,然后取该值与 p 的余数,得到的结果就是当前累加和中要找到的目标余数。如果在无序映射中找到了相同的目标余数,则表示在当前下标之前的子数组中存在和为目标余数的子数组,此时更新 n 的值为当前下标减去在无序映射中找到的目标余数对应的下标,即得到以当前下标为结尾的和为目标余数的最小子数组长度。如果遍历完整个数组后,n 的值没有被更新,则说明无法找到和为目标余数的子数组,返回 -1。否则,返回 n 的值即可。


代码:

class Solution {
public:int minSubarray(vector& nums, int p) {long long sum1 = 0;for(int a : nums)sum1 += a;long target = sum1 % p;if(target == 0)return 0;unordered_map mid{{0,0}};int index = 0;int n = nums.size();long sum2 = 0;for(int a : nums){sum2 += a;index++;int x = (sum2 - target + p) % p;if(mid.count(x))n = min(n,index-mid[x]);mid[sum2 % p] = index;}if(n == nums.size())return -1;return n;}
};

相关内容

热门资讯

运动会致辞 运动会致辞(精选5篇)  无论在学习、工作或是生活中,大家或多或少都用到过致辞吧,致辞要求风格的雅、...
六一儿童节的主持稿 六一儿童节的主持稿(精选8篇)  随着社会一步步向前发展,我们都不可避免地要接触到主持稿,主持稿是主...
元旦文艺汇演主持稿 元旦文艺汇演主持稿范文(通用5篇)  在当下社会,很多情况下我们需要用到主持稿,主持稿起到承上启下的...
颁奖主持词 颁奖主持词三篇  主持人在一场活动中是十分重要的,一个好的主持人是一直带动着活动过程中的气氛,让大家...
婚宴答谢宴简短主持词 婚宴答谢宴简短主持词  主持词要根据活动对象的不同去设置不同的主持词。在人们积极参与各种活动的今天,...
汽车公司庆典主持词 汽车公司庆典主持词  利用在中国拥有几千年文化的诗词能够有效提高主持词的感染力。现今社会在不断向前发...
古筝音乐会主持词 古筝音乐会主持词6篇  主持词要把握好吸引观众、导入主题、创设情境等环节以吸引观众。在一步步向前发展...
小学元旦联欢会主持词开场白和... 小学元旦联欢会主持词开场白和结束词  根据活动对象的不同,需要设置不同的主持词。随着社会一步步向前发...
知识竞赛主持词 知识竞赛主持词(精选6篇)  主持词的写作需要将主题贯穿于所有节目之中。在人们越来越多的参与各种活动...
小学家长会学生欢迎词 小学家长会学生欢迎词小学家长会学生欢迎词文章标题:小学家长会学生欢迎词家长会欢迎辞亲爱的叔叔阿姨,爷...
消夏晚会主持词 2017消夏晚会主持词  漫漫暑假,天气越来越燥热,不妨在炎热的午后,参加一场纳凉晚会,欣赏社区带来...
周立波脱口秀台词 周立波脱口秀台词集锦四十岁之前喝酒是为了别人的一句~~厉害!醉了!!四十岁以后喝酒是为了自己的一句~...
圣诞节活动主持词节目串词 圣诞节活动主持词节目串词3篇  根据活动对象的不同,需要设置不同的主持词。在人们积极参与各种活动的今...
生日华诞主持词 生日华诞主持词范文各位领导,各位朋友,各位来宾,女士们,先生们:  中午好。  今天是个喜庆的日子,...
学术会议主持词 学术会议主持词  什么是主持词  由主持人于节目进行过程中串联节目的串联词。如今的各种演出活动和集会...
订婚仪式及主持词 订婚仪式及主持词范文(通用3篇)  活动对象的不同,主持词的写作风格也会大不一样。在现在的社会生活中...
古剑奇谭欧阳少恭经典台词参考 古剑奇谭欧阳少恭经典台词参考  大型古装玄幻剧《古剑奇谭》正在湖南卫视热播,剧中,乔振宇饰演温文尔雅...
幼儿园晨会主持词 幼儿园晨会主持词  美好的一天从早上开始,从晨会开始,从大家的好的状态开始,从最好的开始。以下是小编...
诗文诵读展示主持词 诗文诵读展示主持词  主持词没有固定的格式,他的最大特点就是富有个性。在当今不断发展的世界,很多晚会...