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

网站服务器如何更改解析网站从哪几个方面维护

网站服务器如何更改解析,网站从哪几个方面维护,网页设计师考试报名,wordpress编辑器宽度题目链接 Leetcode.1590 使数组和能被 P 整除 rating : 2039 题目描述 给你一个正整数数组 n u m s nums nums,请你移除 最短 子数组(可以为 空),使得剩余元素的 和 能被 p p p 整除。 不允许 将整个数组都移除。 请你返回你需…

题目链接

Leetcode.1590 使数组和能被 P 整除 rating : 2039

题目描述

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

请你返回你需要移除的最短子数组的长度,如果无法满足题目要求,返回 − 1 -1 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 ≤ n u m s . l e n g t h ≤ 1 0 5 1 \leq nums.length \leq 10^5 1nums.length105
  • 1 ≤ n u m s [ i ] ≤ 1 0 9 1 \leq nums[i] \leq 10^9 1nums[i]109
  • 1 ≤ p ≤ 1 0 9 1 \leq p \leq 10^9 1p109

解法:前缀和 + 哈希表

假设整个数组 n u m s nums nums 的和为 s s s,那么 k = s m o d p k = s\ mod\ p k=s mod p

  • 如果 k = 0 k = 0 k=0,说明整个数组的和都可以被 p p p 整除,所以不需要移除元素,直接返回 0 0 0
  • 如果 k ≠ 0 k \neq 0 k=0假设我们需要移除的这个子数组和为 t t t,那么 t m o d p = k t\ mod\ p = k t mod p=k,并且还要要求这个子数组的长度是最短的。

假设区间 [ j , i ] [j,i] [j,i] 的子数组满足这个条件,我们用 s u m sum sum 表示 n u m s nums nums 的前缀和,即:

( s u m [ i ] − s u m [ j − 1 ] ) m o d p = k (sum[i] - sum[j-1])\ mod\ p = k (sum[i]sum[j1]) mod p=k

再转换一下:

s u m [ j − 1 ] m o d p = s u m [ i ] m o d p − k sum[j-1]\ mod\ p = sum[i]\ mod\ p - k sum[j1] mod p=sum[i] mod pk

由于 s u m [ j ] m o d p − k sum[j]\ mod\ p - k sum[j] mod pk 有可能是负数,所以我们需要再将其转换为整数:

s u m [ j − 1 ] m o d p = ( s u m [ i ] m o d p − k + p ) m o d p sum[j-1]\ mod\ p = (sum[i]\ mod\ p - k + p)\ mod\ p sum[j1] mod p=(sum[i] mod pk+p) mod p

我们用哈希表来记录这个 s u m [ i ] m o d p sum[i]\ mod\ p sum[i] mod p,值就是其对应的下标 i i i

我们令 k e y = ( s u m [ i ] m o d p − k + p ) m o d p key = (sum[i]\ mod\ p - k + p)\ mod\ p key=(sum[i] mod pk+p) mod p,如果对于当前 k e y key key,哈希表 m p mp mp 中有记录,则 j = m p [ k e y ] j = mp[key] j=mp[key]。说明移除此时的子数组 [ j , i ] [j,i] [j,i] 就能使 n u m s nums nums 的剩余元素满足条件,那么我们更新答案 a n s ans ans

注意:

  • 哈希表 m p mp mp 初始时需要加入 { 0 , − 1 } \{0 , -1 \} {0,1}
  • a n s ans ans 是最终的答案,需要移除的最短子数组的长度,初始化为一个较大的数即可;

时间复杂度: O ( n ) O(n) O(n)

C++代码:

using LL = long long;class Solution {
public:int minSubarray(vector<int>& nums, int p) {int n = nums.size();LL sum = 0;for(auto x:nums) sum += x;int k = sum % p;if(k == 0) return 0;unordered_map<int,int> mp{{0 , -1}};int ans = n;sum = 0;for(int i = 0;i < n;i++){sum += nums[i];auto key = (sum % p - k + p)%p;if(mp.find(key) != mp.end()){auto j = mp[key];ans = min(ans , i - j);}mp[sum % p] = i;}return ans == n ? -1 : ans;}
};
http://www.yayakq.cn/news/548471/

相关文章:

  • 互动网站建设多少钱110平米三室一厅简装
  • 做网站哪家最好买了域名之后怎么做网站
  • 购物网站cookie洛阳青峰网络科技有限公司
  • 10有免费建网站石景山做网站
  • 株洲做网站定制站长工具综合查询系统
  • 网站建设技术公司视频软件
  • 做微电网的公司网站wordpress 添加图片
  • 怎样建网站宣传产品专业的移动网站建设公司
  • 青海商会网站建设公司网站建设课程报告
  • 创办一个网站需要多少钱健康码更新视频
  • 网站建设公司广东网站建设关键要做好哪些工作
  • 网站的内部链接如何做六安百姓杂谈
  • 知果果网站谁做的如何更改网站的关键词
  • 饭店餐厅网站建设建筑人才兼职网
  • 生产营销网站开发联系方式做网站收入来源表
  • 网页设计模板网站免费搜索引擎优化实训心得
  • 如何保护网站模板天津网站建设wangzhii
  • 哈尔滨高端网站建设如何让别人看到自己做的网站
  • 网站制作过程内容网站建设 开票
  • 网站后台用什么开发大型网站建设用什么系统好
  • 外包类设计网站1免费做网站
  • 成华区统一建设办公室网站elo机制
  • 现在网站的外部链接怎么做手机网站设计创意说明
  • 那个网站做毕业设计谷歌推广服务
  • 北京网站开发要多少钱搜索app下载安装
  • 徐州cms建站系统福永营销型网站多少钱
  • 李炎辉网站建设教程app外包公司有哪些
  • 音乐网站开发开发重庆市建设工程造价站
  • wordpress好看的底部深圳做网站可用乐云seo十年
  • ip地址进入网站怎么做的软件开发一般用什么软件