Skip to content

Commit 272658c

Browse files
committed
Initial commit
1 parent d5fde5d commit 272658c

14 files changed

+362
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution {
2+
public:
3+
int missingNumber(vector<int>& arr)
4+
{
5+
int d=(arr.back()-arr.front())/(int)arr.size();
6+
int i=0,j=arr.size()-1,mid;
7+
while(i<j)
8+
{
9+
mid=(i+j)>>1;
10+
if(arr[mid]==arr.front()+mid*d) //All numbers upto mid have no missing number.
11+
i=mid+1;
12+
else
13+
j=mid;
14+
}
15+
return arr.front()+d*i;
16+
}
17+
};

1229-Meeting Scheduler.cpp

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Solution {
2+
public:
3+
vector<int> minAvailableDuration(vector<vector<int>>& slots1, vector<vector<int>>& slots2, int duration)
4+
{
5+
sort(slots1.begin(),slots1.end(),[](vector<int> &l,vector<int> &r){return l.front()<r.front();});
6+
sort(slots2.begin(),slots2.end(),[](vector<int> &l,vector<int> &r){return l.front()<r.front();});
7+
int start,end,i=0,j=0;
8+
while(i<slots1.size()&&j<slots2.size())
9+
{
10+
start=max(slots1[i].front(),slots2[j].front());
11+
end=min(slots1[i].back(),slots2[j].back());
12+
if(end-start>=duration)
13+
return {start,start+duration};
14+
else if(slots1[i].back()<slots2[j].back())
15+
i++;
16+
else
17+
j++;
18+
}
19+
return {};
20+
}
21+
};

1230-Toss Strange Coins.cpp

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
class Solution {
2+
public:
3+
vector<vector<double>> memo;
4+
double dp(vector<double>& prob,int i,int target)
5+
{
6+
if(memo[i][target]!=-1)
7+
return memo[i][target];
8+
if(target==0)
9+
{
10+
double result=1;
11+
for(int d=0;d<i;d++)
12+
result*=1-prob[d];
13+
return memo[i][target]=result;
14+
}
15+
if(i==0)
16+
return memo[i][target]=0;
17+
return memo[i][target]=prob[i-1]*dp(prob,i-1,target-1)+(1-prob[i-1])*dp(prob,i-1,target);
18+
}
19+
double probabilityOfHeads(vector<double>& prob, int target)
20+
{
21+
memo.resize(prob.size()+1,vector<double>(target+1,-1));
22+
return dp(prob,prob.size(),target);
23+
}
24+
};

1231-Divide Chocolate.cpp

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
//Same as 410. Split Array Largest Sum difference of upper_bound
2+
class Solution {
3+
public:
4+
int K;
5+
bool isValid(vector<int>& sweetness,int target)
6+
{
7+
int sum=0,count=0;
8+
for(int &i:sweetness)
9+
{
10+
sum+=i;
11+
if(sum>target)
12+
{
13+
if(++count==K)
14+
return true;
15+
sum=0;
16+
}
17+
}
18+
return false;
19+
}
20+
int maximizeSweetness(vector<int>& sweetness, int K)
21+
{
22+
long j=0,mid;
23+
int i=1e6;
24+
for(int &s:sweetness)
25+
j+=s,i=min(i,s);
26+
if(K==0)
27+
return j;
28+
this->K=K+1;
29+
while(i<j) //Upper_bound
30+
{
31+
mid=(i+j)>>1;
32+
if(isValid(sweetness,mid))
33+
i=mid+1;
34+
else
35+
j=mid;
36+
}
37+
return i;
38+
}
39+
};

1243-Array Transformation.cpp

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class Solution {
2+
public:
3+
vector<int> transformArray(vector<int>& arr)
4+
{
5+
bool changed=true;
6+
int prev;
7+
while(changed)
8+
{
9+
changed=false;
10+
prev=arr.front();
11+
for(int i=1;i<arr.size()-1;i++)
12+
{
13+
if(arr[i]>prev&&arr[i]>arr[i+1])
14+
prev=arr[i],changed=true,arr[i]--;
15+
else if(arr[i]<prev&&arr[i]<arr[i+1])
16+
prev=arr[i],changed=true,arr[i]++;
17+
else
18+
prev=arr[i];
19+
}
20+
}
21+
return arr;
22+
}
23+
};

1244-Design A Leaderboard.cpp

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
class Leaderboard {
2+
public:
3+
Leaderboard() {
4+
5+
}
6+
7+
void addScore(int playerId, int score)
8+
{
9+
if(!leaderBoard.count(playerId))
10+
leaderBoard[playerId]=score,rLeaderBoard.insert(make_pair(score,playerId));
11+
else
12+
{
13+
it=rLeaderBoard.find(leaderBoard[playerId]);
14+
while(it->second!=playerId)
15+
it++;
16+
rLeaderBoard.erase(it);
17+
rLeaderBoard.insert(make_pair(leaderBoard[playerId]+score,playerId));
18+
leaderBoard[playerId]+=score;
19+
}
20+
}
21+
22+
int top(int K)
23+
{
24+
int sum=0;
25+
for(it2=rLeaderBoard.rbegin();it2!=rLeaderBoard.rend()&&K;it2++,K--)
26+
sum+=it2->first;
27+
return sum;
28+
}
29+
30+
void reset(int playerId)
31+
{
32+
it=rLeaderBoard.lower_bound(leaderBoard[playerId]);
33+
while(it!=rLeaderBoard.end()&&it->second!=playerId)
34+
it++;
35+
rLeaderBoard.erase(it);
36+
leaderBoard.erase(playerId);
37+
}
38+
private:
39+
multimap<int,int> rLeaderBoard;
40+
multimap<int,int>::iterator it;
41+
multimap<int,int>::reverse_iterator it2;
42+
unordered_map<int,int> leaderBoard;
43+
};
44+
45+
/**
46+
* Your Leaderboard object will be instantiated and called as such:
47+
* Leaderboard* obj = new Leaderboard();
48+
* obj->addScore(playerId,score);
49+
* int param_2 = obj->top(K);
50+
* obj->reset(playerId);
51+
*/

1245-Tree Diameter.cpp

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
class Solution {
2+
public:
3+
int result=0;
4+
unordered_map<int,vector<int>> adjList;
5+
int dfs(int node,int prev)
6+
{
7+
int d1=0,d2=0,d;
8+
for(int &n:adjList[node])
9+
if(n!=prev)
10+
{
11+
d=dfs(n,node);
12+
if(d>d1)
13+
d2=d1,d1=d;
14+
else if(d>d2)
15+
d2=d;
16+
}
17+
result=max(result,d1+d2);
18+
return d1+1;
19+
}
20+
int treeDiameter(vector<vector<int>>& edges)
21+
{
22+
for(vector<int> &v:edges)
23+
adjList[v[0]].push_back(v[1]),adjList[v[1]].push_back(v[0]);
24+
dfs(0,-1);
25+
return result;
26+
}
27+
};

1246-Palindrome Removal.cpp

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class Solution {
2+
public:
3+
vector<vector<int>> memo;
4+
int dp(vector<int>& arr,int i,int j)
5+
{
6+
if(i>j)
7+
return 0;
8+
if(memo[i][j]!=-1)
9+
return memo[i][j];
10+
memo[i][j]=1+dp(arr,i+1,j); //1 number as a palindrome , also base case
11+
if(i<arr.size()-1&&arr[i]==arr[i+1]) //2 numbers as a palindrome also base case
12+
memo[i][j]=min(memo[i][j],1+dp(arr,i+2,j));
13+
for(int k=i+2;k<=j;k++) //i+2 because 2 numbers are covered before.
14+
if(arr[i]==arr[k])
15+
memo[i][j]=min(memo[i][j],dp(arr,i+1,k-1)+dp(arr,k+1,j)); //No +1 here since we are considering it to be a palindrome.
16+
return memo[i][j];
17+
}
18+
int minimumMoves(vector<int>& arr)
19+
{
20+
memo.resize(arr.size(),vector<int>(arr.size(),-1));
21+
return dp(arr,0,arr.size()-1);
22+
}
23+
};

1256-Encode Number (Recursive).cpp

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
static string choice="10";
2+
class Solution {
3+
public:
4+
string encode(int num)
5+
{
6+
return num>0?encode((num-1)/2)+choice[num&1]:"";
7+
}
8+
};

1256-Encode Number.cpp

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution {
2+
public:
3+
string encode(int num)
4+
{
5+
int base=log2(num+1),pow2=(1<<base)-1,i=0;
6+
string result(base,'0');
7+
pow2=num-pow2;
8+
while(pow2)
9+
{
10+
if(pow2&1)
11+
result[i++]='1';
12+
else
13+
result[i++]='0';
14+
pow2>>=1;
15+
}
16+
reverse(result.begin(),result.end());
17+
return result;
18+
}
19+
};

1257-Smallest Common Region.cpp

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution {
2+
public:
3+
string findSmallestRegion(vector<vector<string>>& regions, string region1, string region2)
4+
{
5+
unordered_map<string,string> parent;
6+
unordered_set<string> encounteredParents;
7+
for(vector<string> &v:regions)
8+
for(int i=1;i<v.size();i++)
9+
parent[v[i]]=v.front();
10+
while(""!=region1)
11+
encounteredParents.insert(region1),region1=parent[region1];
12+
while(""!=region2)
13+
if(encounteredParents.count(region2))
14+
return region2;
15+
else
16+
region2=parent[region2];
17+
return "";
18+
}
19+
};

1257-Smallest Common Region_2.cpp

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution {
2+
public:
3+
string findSmallestRegion(vector<vector<string>>& regions, string region1, string region2)
4+
{
5+
unordered_map<string,string> parent;
6+
for(vector<string> &v:regions)
7+
for(int i=1;i<v.size();i++)
8+
parent[v[i]]=v.front();
9+
string r1=region1,r2=region2;
10+
while(r1!=r2)
11+
r1=r1==""?region2:parent[r1],r2=r2==""?region1:parent[r2];
12+
return r1;
13+
}
14+
};

1258-Synonymous Sentences.cpp

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
class Solution {
2+
public:
3+
unordered_set<string> visited;
4+
unordered_map<string,vector<string>> adjList;
5+
vector<string> dfs(string &s)
6+
{
7+
visited.insert(s);
8+
vector<string> result,temp;
9+
result.push_back(s);
10+
for(string &next:adjList[s])
11+
{
12+
if(!visited.count(next))
13+
temp=dfs(next);
14+
result.insert(result.end(),temp.begin(),temp.end());
15+
}
16+
return result;
17+
}
18+
vector<string> result;
19+
string temp;
20+
void create(string &s,int i)
21+
{
22+
if(i>=s.length())
23+
{
24+
temp.pop_back();
25+
result.push_back(temp);
26+
temp+=' ';
27+
return;
28+
}
29+
string word=s.substr(i,s.find(' ',i)-i);
30+
int tmpbegin=temp.length();
31+
vector<string> tempList;
32+
if(adjList.count(word))
33+
{
34+
visited.clear();
35+
tempList=dfs(word);
36+
sort(tempList.begin(),tempList.end());
37+
for(string &next:tempList)
38+
{
39+
temp+=next+' ';
40+
create(s,i+word.length()+1);
41+
temp.erase(tmpbegin,temp.length()-tmpbegin);
42+
}
43+
}
44+
else
45+
temp+=word+' ',create(s,i+word.length()+1),temp.erase(tmpbegin,temp.length()-tmpbegin);
46+
}
47+
vector<string> generateSentences(vector<vector<string>>& synonyms, string text)
48+
{
49+
for(vector<string> &v:synonyms)
50+
adjList[v.front()].push_back(v.back()),adjList[v.back()].push_back(v.front());
51+
create(text,0);
52+
return result;
53+
}
54+
};

1259-Handshakes That Don't Cross.cpp

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
static unordered_map<int,int> memo;
2+
static int MOD=1e9+7;
3+
class Solution {
4+
public:
5+
static int dp(int n)
6+
{
7+
if(n<=2)
8+
return 1;
9+
if(memo.count(n))
10+
return memo[n];
11+
long result=0;
12+
int last=n/2+1;
13+
for(int i=2;i<=n/2;i+=2)
14+
result+=(2*(long)dp(n-i)*dp(i-2))%MOD;
15+
if(last%2==0)
16+
result+=(long)dp(n-last)*dp(last-2);
17+
return memo[n]=result%MOD;
18+
}
19+
int numberOfWays(int num_people)
20+
{
21+
return dp(num_people);
22+
}
23+
};

0 commit comments

Comments
 (0)