Skip to content

Commit d9e1b6b

Browse files
committed
Ques Sliding window
1 parent ed3a47c commit d9e1b6b

5 files changed

Lines changed: 328 additions & 0 deletions

File tree

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// For a given array and integers k & x find the
2+
// maximum sum subarray of size k and having sum less than x.
3+
// Approach sliding window
4+
// Time O(n)
5+
6+
#include <bits/stdc++.h>
7+
8+
using namespace std;
9+
10+
int maxSumSubarray(vector<int> arr, int n, int k, int x)
11+
{
12+
int sum = 0;
13+
int ans = 0;
14+
15+
for (int i = 0; i < k; i++)
16+
{
17+
sum += arr[i];
18+
}
19+
20+
if (sum < x)
21+
{
22+
ans = sum;
23+
}
24+
25+
for (int i = k; i < n; i++)
26+
{
27+
sum = sum + arr[i] - arr[i - k];
28+
29+
if (sum < x)
30+
{
31+
ans = max(ans, sum);
32+
}
33+
}
34+
35+
return ans;
36+
}
37+
38+
int main()
39+
{
40+
41+
vector<int> arr = {7, 5, 4, 6, 8, 9};
42+
43+
int k = 3;
44+
int x = 20;
45+
int n = arr.size();
46+
47+
cout << maxSumSubarray(arr, n, k, x);
48+
49+
return 0;
50+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// For a given array and an integer x, find the Minimum Subarray size
2+
// for which sum > x.
3+
// APP- Sliding Window
4+
// Time O(n)
5+
6+
#include <bits/stdc++.h>
7+
8+
using namespace std;
9+
10+
int MinSubarraySize(vector<int>arr,int n,int x)
11+
{
12+
13+
int sum=0,ans=n+1;
14+
int j=0;
15+
for (int i = 0; i < n; i++)
16+
{
17+
sum+=arr[i];
18+
19+
while(sum>x)
20+
{
21+
ans=min(ans,i-j+1);
22+
sum=sum-arr[j];
23+
j++;
24+
}
25+
}
26+
27+
return ans;
28+
29+
}
30+
31+
int main()
32+
{
33+
34+
35+
vector<int> arr = {1, 45, 6, 10, 54};
36+
37+
// int k = 3;
38+
int x = 51;
39+
int n = arr.size();
40+
41+
cout << MinSubarraySize(arr, n, x);
42+
//if min length is n+1 no such element exist
43+
return 0;
44+
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
// for a given array and an integer k, check if ant subarray of size
2+
// k in the array such that elements in the subarray form a number
3+
// divisible by 3.
4+
5+
#include <bits/stdc++.h>
6+
7+
using namespace std;
8+
9+
void makeNumberFromSubarray(vector<int> arr, int k)
10+
{
11+
pair<int, int> ans;
12+
int n = arr.size();
13+
14+
int sum = 0;
15+
16+
for (int i = 0; i < k; i++)
17+
{
18+
sum += arr[i];
19+
}
20+
21+
bool found = false;
22+
23+
if (sum % 3 == 0)
24+
{
25+
ans = make_pair(0, k - 1);
26+
found = true;
27+
}
28+
29+
for (int j = k; j < n; j++)
30+
{
31+
if (found)
32+
{
33+
break;
34+
}
35+
sum = sum + arr[j] - arr[j - k];
36+
if (sum % 3 == 0)
37+
{
38+
ans = make_pair(j - k + 1, j);
39+
found = true;
40+
}
41+
}
42+
43+
if (!found)
44+
{
45+
ans = make_pair(-1, 0);
46+
}
47+
if (ans.first == -1)
48+
{
49+
cout << "Does not exist" << endl;
50+
}
51+
else
52+
{
53+
for (int i = ans.first; i <= ans.second; i++)
54+
{
55+
cout << arr[i] << " ";
56+
}
57+
}
58+
}
59+
60+
int main()
61+
{
62+
63+
vector<int> arr = {23, 45, 12, 56, 82};
64+
65+
int k = 3;
66+
67+
makeNumberFromSubarray(arr, k);
68+
69+
return 0;
70+
}
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
// For a given array and an integer k check if any subarray of size
2+
// k exist in the array such that concatenation of elements form a palindrome.
3+
4+
#include <bits/stdc++.h>
5+
6+
using namespace std;
7+
8+
bool isPalindrome(int num)
9+
{
10+
int temp = num, rev = 0;
11+
12+
while (temp > 0)
13+
{
14+
rev = rev * 10 + temp % 10;
15+
temp = temp / 10;
16+
}
17+
18+
if (rev == num)
19+
{
20+
return true;
21+
}
22+
return false;
23+
}
24+
25+
int findPalindromicSubarray(vector<int> arr, int k)
26+
{
27+
28+
int n = arr.size();
29+
int num = 0;
30+
for (int i = 0; i < k; i++)
31+
{
32+
num = num * 10 + arr[i];
33+
}
34+
35+
if (isPalindrome(num))
36+
{
37+
return 0;
38+
}
39+
40+
for (int j = k; j < n; j++)
41+
{
42+
num = (num % (int)pow(10, k - 1)) * 10 + arr[j];
43+
if (isPalindrome(num))
44+
{
45+
return j - k + 1;
46+
}
47+
}
48+
49+
return -1;
50+
}
51+
52+
int main()
53+
{
54+
vector<int> arr = {2, 3, 5, 1, 1, 5};
55+
56+
int k = 4;
57+
// int x = 51;
58+
int n = arr.size();
59+
60+
int ans = findPalindromicSubarray(arr, k);
61+
62+
if (ans == -1)
63+
{
64+
cout << "DNE" << endl;
65+
}
66+
else
67+
{
68+
for (int i = ans; i < ans + k; i++)
69+
{
70+
cout << arr[i] << " ";
71+
}
72+
cout << endl;
73+
}
74+
return 0;
75+
}
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
// For a given array and integer k, find the maximum perfect numbers
2+
// in a subarray of size k.
3+
// Perfect Number- number which is equal to the sum of its proper
4+
// divisors(+ve) except for the number itself.
5+
6+
#include <bits/stdc++.h>
7+
8+
using namespace std;
9+
10+
bool isNumberPerfect(int num)
11+
{
12+
int sum = 1;
13+
for (int i = 2; i < sqrt(num); i++)
14+
{
15+
if (num % i == 0)
16+
{
17+
if (i == num / i)
18+
{
19+
sum += i;
20+
}
21+
else
22+
{
23+
sum += i + num / i;
24+
}
25+
}
26+
}
27+
28+
if (sum == num && num != 1)
29+
{
30+
return true;
31+
}
32+
33+
return false;
34+
}
35+
36+
int maxSum(vector<int> arr, int n, int k)
37+
{
38+
if (n < k)
39+
{
40+
cout << "NP" << endl;
41+
return -1;
42+
}
43+
44+
int sum = 0, res = 0;
45+
for (int i = 0; i < k; i++)
46+
{
47+
sum += arr[i];
48+
}
49+
res = sum;
50+
for (int j = k; j < n; j++)
51+
{
52+
sum = sum + arr[j] - arr[j - k];
53+
res = max(res, sum);
54+
}
55+
56+
return res;
57+
}
58+
59+
int maxNumberOfPerfects(vector<int> arr, int n, int k)
60+
{
61+
62+
for (int i = 0; i < n; i++)
63+
{
64+
if (isNumberPerfect(arr[i]))
65+
{
66+
arr[i] = 1;
67+
}
68+
else
69+
{
70+
arr[i] = 0;
71+
}
72+
}
73+
74+
return maxSum(arr, n, k);
75+
}
76+
77+
int main()
78+
{
79+
80+
vector<int> arr = {28, 2, 3, 6, 496, 99, 8128, 24 };
81+
82+
int k = 4;
83+
84+
int n = arr.size();
85+
86+
cout << maxNumberOfPerfects(arr, n, k) << endl;
87+
88+
return 0;
89+
}

0 commit comments

Comments
 (0)