Skip to content

Commit a8279d6

Browse files
committed
More solutions
1 parent 5ea1863 commit a8279d6

20 files changed

+691
-0
lines changed

Add_Two_Numbers.cpp

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* struct ListNode {
4+
* int val;
5+
* ListNode *next;
6+
* ListNode(int x) : val(x), next(NULL) {}
7+
* };
8+
*/
9+
class Solution {
10+
public:
11+
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
12+
if(l1 == nullptr && l2 == nullptr) return nullptr;
13+
14+
int cbit = 0;
15+
ListNode *p = l1;
16+
ListNode *pre = nullptr;
17+
ListNode *q = l2;
18+
int sum = 0;
19+
while(p && q){
20+
p->val = add(p->val, q->val, cbit);
21+
pre = p;
22+
p = p->next;
23+
q = q->next;
24+
}
25+
26+
if(q) {
27+
pre->next = q;
28+
p = q;
29+
}
30+
31+
while (p){
32+
p->val = add(p->val, 0, cbit);
33+
pre = p;
34+
p = p->next;
35+
}
36+
37+
if(cbit == 1){
38+
pre->next = new ListNode(1);
39+
}
40+
41+
return l1;
42+
43+
// cbit = 1 after last node
44+
}
45+
private:
46+
int add(int a, int b, int &cbit){
47+
int sum = 0;
48+
49+
sum = a+b+cbit;
50+
cbit = 0;
51+
if(sum >= 10){
52+
sum %= 10;
53+
cbit = 1;
54+
}
55+
return sum;
56+
}
57+
};

Best_Time_to_Buy_and_Sell_Stock.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
class Solution {
2+
public:
3+
int maxProfit(vector<int> &prices) {
4+
if(prices.size() < 2) return 0;
5+
6+
vector<int> diff(prices.size()-1);
7+
8+
adjacent_difference(prices.begin(), prices.end(), diff.begin());
9+
10+
int sum = 0;
11+
int max_sum = 0;
12+
13+
for(int i = 0; i < diff.size(); i++){
14+
sum += diff[i];
15+
if(sum < 0){
16+
sum = 0;
17+
}
18+
19+
if(sum > max_sum){
20+
max_sum = sum;
21+
}
22+
}
23+
24+
return max_sum;
25+
}
26+
};

Best_Time_to_Buy_and_Sell_Stock_2.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution {
2+
public:
3+
int maxProfit(vector<int> &prices) {
4+
if(prices.size() < 2) return 0;
5+
6+
int mp = 0;
7+
8+
for(int i = 1; i < prices.size(); i++){
9+
if(prices[i] > prices[i-1]){
10+
mp += prices[i] - prices[i-1];
11+
}
12+
}
13+
14+
return mp;
15+
}
16+
};

Candy.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
class Solution {
2+
public:
3+
int candy(vector<int> &ratings) {
4+
if(ratings.empty()) return 0;
5+
if(ratings.size() == 1) return 1;
6+
7+
vector<int> l(ratings.size(), 1);
8+
vector<int> r(ratings.size(), 1);
9+
10+
for(int i = 1; i < ratings.size(); i++){
11+
if(ratings[i] > ratings[i-1]){
12+
l[i] = l[i-1]+1;
13+
}
14+
}
15+
16+
for(int i = ratings.size()-2; i >= 0; i--){
17+
if(ratings[i] > ratings[i+1]){
18+
r[i] = r[i+1]+1;
19+
}
20+
}
21+
22+
int sum = 0;
23+
for(int i = 0; i < l.size(); i++){
24+
sum += max(l[i], r[i]);
25+
}
26+
27+
return sum;
28+
}
29+
};

Combinations.cpp

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
class Solution {
2+
public:
3+
vector<vector<int> > combine(int n, int k) {
4+
vector<int> nums;
5+
6+
for(int i = 1; i <= n; i++){
7+
nums.push_back(i);
8+
}
9+
10+
vector<vector<int>> result;
11+
combine_helper(result, vector<int>(), nums, k);
12+
return result;
13+
}
14+
15+
private:
16+
void combine_helper(vector<vector<int>> &result, vector<int> sofar, vector<int> rest, int k){
17+
if(sofar.size() == k){
18+
result.push_back(sofar);
19+
return;
20+
}
21+
if(rest.empty()) return;
22+
23+
int x = 0;
24+
if(sofar.empty()) x = 0;
25+
else x = sofar[sofar.size()-1];
26+
27+
while(!rest.empty() && rest[0] < x){
28+
rest.erase(rest.begin());
29+
}
30+
31+
while(!rest.empty()){
32+
sofar.push_back(rest[0]);
33+
rest.erase(rest.begin());
34+
combine_helper(result, sofar, rest, k);
35+
sofar.pop_back();
36+
}
37+
}
38+
};
39+
40+
41+
class Solution {
42+
public:
43+
vector<vector<int> > combine(int n, int k) {
44+
vector<vector<int>> result;
45+
combine_helper(result, vector<int>(), n, 1, k);
46+
return result;
47+
}
48+
49+
private:
50+
void combine_helper(vector<vector<int>> &result, vector<int> sofar, int n, int s, int k){
51+
if(k == 0){
52+
result.push_back(sofar);
53+
return;
54+
}
55+
56+
for(int i = s; i <= n; i++){
57+
sofar.push_back(i);
58+
combine_helper(result, sofar, n, i+1, k-1);
59+
sofar.pop_back();
60+
}
61+
}
62+
};

Insertion_Sort_List.cpp

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* struct ListNode {
4+
* int val;
5+
* ListNode *next;
6+
* ListNode(int x) : val(x), next(NULL) {}
7+
* };
8+
*/
9+
class Solution {
10+
public:
11+
ListNode *insertionSortList(ListNode *head) {
12+
if(head == nullptr) return nullptr;
13+
if(head->next == nullptr) return head;
14+
15+
ListNode *pre = head;
16+
ListNode *p = head->next;
17+
ListNode dummy(0);
18+
ListNode *d = &dummy;
19+
d->next = head;
20+
21+
while(p){
22+
if(pre->val <= p->val){
23+
pre = p;
24+
p = p->next;
25+
}else{
26+
d = &dummy;
27+
while(d->next->val < p->val){
28+
d = d->next;
29+
}
30+
31+
pre->next = p->next;
32+
p->next = d->next;
33+
d->next = p;
34+
p = pre->next;
35+
}
36+
}
37+
38+
return dummy.next;
39+
}
40+
};

Integer_to_Roman.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
public:
3+
string intToRoman(int num) {
4+
if(num <= 0) return "";
5+
6+
vector<int> n_map = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
7+
vector<string> s_map = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
8+
9+
int i = 0;
10+
string result;
11+
while(num > 0){
12+
if(num - n_map[i] >= 0){
13+
num -= n_map[i];
14+
result += s_map[i];
15+
}else{
16+
i++;
17+
}
18+
}
19+
20+
return result;
21+
}
22+
};

Interleaving_String.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
class Solution {
2+
public:
3+
bool isInterleave(string s1, string s2, string s3) {
4+
if(s1 == "") return s2 == s3;
5+
if(s2 == "") return s1 == s3;
6+
7+
int m = s1.size();
8+
int n = s2.size();
9+
10+
if(n+m != s3.size()) return false;
11+
12+
vector<vector<bool>> tbl(m+1, vector<bool>(n+1, false));
13+
tbl[0][0] = true;
14+
15+
for(int j = 1; j <= n; j++){
16+
if(s2[j-1] == s3[j-1]) tbl[0][j] = true;
17+
}
18+
for(int i = 1; i <= m; i++){
19+
if(s1[i-1] == s3[i-1]) tbl[i][0] = true;
20+
}
21+
22+
int k;
23+
for(int i = 1; i <=m; i++){
24+
for(int j = 1; j<=n; j++){
25+
k = i+j-1;
26+
if(s1[i-1] == s3[k] && s2[j-1] != s3[k]){
27+
tbl[i][j] = tbl[i-1][j];
28+
}else if(s1[i-1] != s3[k] && s2[j-1] == s3[k]){
29+
tbl[i][j] = tbl[i][j-1];
30+
}else if(s1[i-1] == s3[k] && s2[j-1] == s3[k]){
31+
tbl[i][j] = tbl[i-1][j] || tbl[i][j-1];
32+
}else{
33+
tbl[i][j] = false;
34+
}
35+
}
36+
}
37+
return tbl[m][n];
38+
}
39+
};

Longest_Palindromic_Substring.cpp

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
class Solution {
2+
public:
3+
string longestPalindrome(string s) {
4+
if(s == "") return "";
5+
6+
int n = s.size();
7+
vector<vector<bool>> tbl(n, vector<bool>(n, false));
8+
9+
for(int i = 0; i < n; i++){
10+
tbl[i][i] = true;
11+
}
12+
13+
int max_len = 1;
14+
int s_ind = 0;
15+
16+
for(int i = 0; i < n-1; i++){
17+
if(s[i] == s[i+1]) {
18+
tbl[i][i+1] = true;
19+
max_len = 2;
20+
s_ind = i;
21+
}else{
22+
tbl[i][i+1] = false;
23+
}
24+
}
25+
26+
int j;
27+
for(int len = 3; len <= n; len++){
28+
for(int i = 0; i <= n-len; i++){
29+
j = i + len -1;
30+
31+
if(s[i] == s[j] && tbl[i+1][j-1]){
32+
tbl[i][j] = true;
33+
if(len > max_len){
34+
max_len = len;
35+
s_ind = i;
36+
}
37+
}else{
38+
tbl[i][j] = false;
39+
}
40+
}
41+
}
42+
43+
return s.substr(s_ind, max_len);
44+
}
45+
};

Palindrome_Number.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class Solution {
2+
public:
3+
bool isPalindrome(int x) {
4+
if(x < 0) return false;
5+
if(x < 10) return true;
6+
7+
int y = x;
8+
int a = 1;
9+
while(y >= 10){
10+
y /= 10;
11+
a *= 10;
12+
}
13+
14+
while(a > 1){
15+
if(x/a != x%10) return false;
16+
x %= a;
17+
x /= 10;
18+
a /= 100;
19+
}
20+
21+
return true;
22+
}
23+
};

0 commit comments

Comments
 (0)