Skip to content

Commit def463e

Browse files
authored
Create 1590. Make Sum Divisible by P (#603)
2 parents 3f3a100 + e4893b7 commit def463e

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

1590. Make Sum Divisible by P

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
typedef long long ll;
2+
class Solution {
3+
public:
4+
int minSubarray(vector<int>& nums, int p) {
5+
/*
6+
3 1 4 2 totalsum=10
7+
remove 3 or 31 or 314
8+
remove 1 or 14 or 142
9+
remove 4 or 42
10+
remove 2
11+
0 3 1 4 2
12+
ps[0 3 4 8 10]
13+
brute force O(N*2);
14+
how to do it nlogn or n
15+
if on subtracting from sum a number which has same remainder when%p
16+
thats the ans
17+
now question becomes finding subarrya with sum as sum%p
18+
*/
19+
int n=nums.size();
20+
ll totalsum=0;
21+
for(auto& i:nums)totalsum+=i;
22+
if(totalsum%p==0)return 0;
23+
ll rem=totalsum%p;
24+
unordered_map<ll,int>mp;
25+
ll sum=0;int ans=n;
26+
mp[0]=-1;
27+
for(int i=0;i<n;i++){
28+
sum = (sum+nums[i])%p;
29+
ll remsum=(sum-rem+p)%p;
30+
if(mp.find(remsum)!=mp.end())ans=min(ans,i-mp[remsum]);
31+
mp[sum]=i;
32+
}
33+
if(ans==n)return -1;
34+
return ans;
35+
}
36+
};

0 commit comments

Comments
 (0)