Skip to content

Commit 0b768a5

Browse files
committed
Two Pointer and BS ques
1 parent 9589ba1 commit 0b768a5

6 files changed

+220
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
bool isValid(vector<int> A, int maxStud, int mid)
2+
{
3+
int i;
4+
int students=1;
5+
long long int sum=0;
6+
for(i=0;i<A.size();i++)
7+
{
8+
sum+=A[i];
9+
if(sum>mid)
10+
{
11+
students++;
12+
sum=A[i];
13+
}
14+
15+
if(students>maxStud)
16+
return false;
17+
}
18+
19+
return true;
20+
}
21+
22+
int Solution::books(vector<int> &A, int B) {
23+
24+
if(B>A.size())
25+
return -1;
26+
27+
int start=INT_MIN;
28+
long long int end=0, res;
29+
int i;
30+
for(i=0;i<A.size();i++)
31+
{
32+
start=max(start,A[i]);
33+
end+=A[i];
34+
}
35+
36+
while(start<=end)
37+
{
38+
long long int mid=start+(end-start)/2;
39+
40+
if(isValid(A,B,mid)==true)
41+
{
42+
res=mid;
43+
end=mid-1;
44+
}
45+
else
46+
start=mid+1;
47+
}
48+
49+
return res;
50+
}
51+

Interview Bit/Binary Search/Merge Two Sorted Lists II.cpp

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
int findPivot(vector<int> arr, int low, int high)
2+
{
3+
if(low>high)
4+
return -1;
5+
6+
int mid=(high+low)/2;
7+
8+
if(mid<high && arr[mid]>arr[mid+1])
9+
return mid;
10+
11+
if(mid>low&&arr[mid]<arr[mid-1])
12+
return mid-1;
13+
14+
if(arr[low]>arr[mid])
15+
return findPivot(arr,low,mid-1);
16+
17+
return findPivot(arr,mid+1,high);
18+
}
19+
int binSearch(vector<int> arr, int low, int high, int key)
20+
{
21+
if(low>high)
22+
return -1;
23+
24+
int mid=(high+low)/2;
25+
26+
if(arr[mid]==key)
27+
return mid;
28+
29+
else if(arr[mid]<key)
30+
binSearch(arr,mid+1,high,key);
31+
32+
else
33+
binSearch(arr,low,mid-1,key);
34+
}
35+
36+
int Solution::search(const vector<int> &A, int B) {
37+
38+
int min=0,max=0;
39+
40+
for(int i=1;i<A.size();i++)
41+
{
42+
if(A[i]>=A[max])
43+
{
44+
max=i;
45+
}
46+
else
47+
{
48+
break;
49+
}
50+
}
51+
52+
if(B<A[min])
53+
{
54+
min=max+1;
55+
max=A.size()-1;
56+
}
57+
58+
while(min<=max)
59+
{
60+
int mid=(min+max)/2;
61+
62+
if(A[mid]==B)
63+
{
64+
return mid;
65+
}
66+
67+
if(A[mid]>B)
68+
{
69+
max=mid-1;
70+
}
71+
else
72+
{
73+
min=mid+1;
74+
}
75+
}
76+
77+
return -1;
78+
79+
}
80+
========================================================================================================
81+
int Solution::search(const vector<int> &A, int B) {
82+
int n = A.size();
83+
int low = 0, high = n-1;
84+
while(low<=high){
85+
int mid = low + (high-low)/2;
86+
if(A[mid] == B) return mid;
87+
else if(A[0]<=A[mid]){//i.e. left part is sorted
88+
if(A[0]<=B && B < A[mid]) high = mid-1;//B lies on left part
89+
else low = mid+1;
90+
}else{//right part is sorted
91+
if(A[mid] < B && B<=A[n-1]) low = mid+1;//B lies on right part
92+
else high = mid-1;
93+
}
94+
}
95+
return -1;
96+
}

Interview Bit/Two Pointers/3 sum.cpp

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
int Solution::threeSumClosest(vector<int> &A, int B) {
2+
3+
int i,curr,start,end;
4+
int sum=0, res=INT_MAX, ans;
5+
sort(A.begin(), A.end());
6+
for(i=A.size()-1;i>=2;i--)
7+
{
8+
curr=A[i];
9+
start=0; end=i-1;
10+
while(start<end)
11+
{
12+
sum=A[start]+A[end]+curr;
13+
14+
if(abs(sum-B)<res)
15+
{
16+
res=abs(sum-B);
17+
ans=sum;
18+
}
19+
20+
if(sum<B)
21+
start++;
22+
else if(sum>B)
23+
end--;
24+
else
25+
return sum;
26+
}
27+
}
28+
return ans;
29+
30+
}
31+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
int Solution::maxArea(vector<int> &A) {
2+
long long int res=0;
3+
long long int sum=0;
4+
5+
int start=0,end=A.size()-1;
6+
7+
while(start<end)
8+
{
9+
sum=(end-start)*min(A[start],A[end]);
10+
11+
if(sum>res)
12+
res=sum;
13+
if(A[start]<A[end])
14+
{
15+
start++;
16+
}
17+
else if(A[start]>=A[end])
18+
{
19+
end--;
20+
}
21+
22+
}
23+
24+
return res;
25+
}
26+
27+
=========================================================================
28+
29+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
void Solution::merge(vector<int> &A, vector<int> &B) {
2+
// Do not write main() function.
3+
// Do not read input, instead use the arguments to the function.
4+
// Do not print the output, instead return values as specified
5+
// Still have a doubt. Checkout www.interviewbit.com/pages/sample_codes/ for more details
6+
int i = A.size() - 1, j = B.size() - 1, index = A.size() + B.size() - 1;
7+
A.resize(A.size() + B.size());
8+
while(i >= 0 and j >= 0)
9+
A[index--] = (A[i] > B[j]) ? A[i--] : B[j--];
10+
while(j >= 0)
11+
A[index--] = B[j--];
12+
}
13+

0 commit comments

Comments
 (0)