Skip to content

Commit c8bbffa

Browse files
authored
Merge branch 'main' into main
2 parents 84c2202 + eed040d commit c8bbffa

25 files changed

+787
-44
lines changed

README.md

Lines changed: 18 additions & 18 deletions
Large diffs are not rendered by default.

c/1929-concatenation-of-array.c

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/**
2+
* Note: The returned array must be malloced, assume caller calls free().
3+
*/
4+
int* getConcatenation(int* nums, int numsSize, int* returnSize){
5+
// dynamically allocate a new int array that is double the size of the
6+
// input array
7+
int *ans = (int*)malloc(2*numsSize*sizeof(int));
8+
9+
// loop over input array
10+
for (int i = 0; i < numsSize; i++) {
11+
ans[i] = ans[i+numsSize] = nums[i];
12+
}
13+
14+
// Set returnSize to double the input size
15+
*returnSize = 2 * numsSize;
16+
return ans;
17+
}

cpp/0162-find-peak-element.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// Time: O(logN)
2+
// Space: O(1)
3+
4+
class Solution {
5+
public:
6+
int findPeakElement(vector<int>& nums) {
7+
int n = nums.size();
8+
9+
if(n == 1) return 0;
10+
11+
int left = 0, right = n - 1;
12+
while(left <= right) {
13+
int mid = left + (right-left)/2;
14+
15+
if(mid > 0 && nums[mid] < nums[mid-1]) {
16+
right = mid - 1;
17+
}
18+
else if(mid < n-1 && nums[mid] < nums[mid+1]) {
19+
left = mid + 1;
20+
}
21+
else {
22+
return mid;
23+
}
24+
}
25+
return -1;
26+
}
27+
};

cpp/0474-ones-and-zeroes.cpp

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
class Solution {
2+
public:
3+
int rec(vector<pair<int, int>>& oz, int i, int m, int n, vector<vector<vector<int>>>& dp)
4+
{
5+
if (i >= oz.size())
6+
return 0;
7+
8+
if (oz[i].first > m || oz[i].second > n)
9+
return rec(oz, i + 1, m, n, dp);
10+
11+
if (dp[i][m][n] != -1)
12+
return dp[i][m][n];
13+
14+
int take = 1 + rec(oz, i + 1, m - oz[i].first, n - oz[i].second, dp);
15+
int notTake = rec(oz, i + 1, m, n, dp);
16+
17+
return dp[i][m][n] = max(take, notTake);
18+
}
19+
int findMaxForm(vector<string>& strs, int m, int n) {
20+
vector<pair<int, int>> oz(strs.size());
21+
vector<vector<vector<int>>> dp (strs.size() + 1, vector<vector<int>>(m + 1, vector<int> (n + 1, -1)));
22+
23+
for (int i = 0; i < strs.size(); i++)
24+
{
25+
int one = 0, zero = 0;
26+
for (int j = 0; j < strs[i].size(); j++)
27+
{
28+
if (strs[i][j] == '1')
29+
one++;
30+
else
31+
zero++;
32+
}
33+
oz[i] = {zero, one};
34+
}
35+
36+
return rec(oz, 0, m, n, dp);
37+
}
38+
};

cpp/0735-asteroid-collision.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
class Solution {
2+
public:
3+
vector<int> asteroidCollision(vector<int>& asteroids) {
4+
vector<int> stk;
5+
6+
for (auto ast: asteroids)
7+
{
8+
while (!stk.empty() && stk.back() > 0 && ast < 0)
9+
{
10+
int diff = ast + stk.back();
11+
if (diff > 0)
12+
{
13+
ast = 0;
14+
}
15+
else if (diff < 0)
16+
{
17+
stk.pop_back();
18+
}
19+
else
20+
{
21+
ast = 0;
22+
stk.pop_back();
23+
}
24+
}
25+
if (ast != 0)
26+
stk.push_back(ast);
27+
}
28+
return stk;
29+
}
30+
};
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* struct ListNode {
4+
* int val;
5+
* ListNode *next;
6+
* ListNode() : val(0), next(nullptr) {}
7+
* ListNode(int x) : val(x), next(nullptr) {}
8+
* ListNode(int x, ListNode *next) : val(x), next(next) {}
9+
* };
10+
*/
11+
12+
// Time: O(n)
13+
// Space: O(1)
14+
class Solution {
15+
public:
16+
int pairSum(ListNode* head) {
17+
ListNode *fast = head, *slow = head;
18+
19+
while(fast && fast->next) {
20+
slow = slow->next;
21+
fast = fast->next->next;
22+
}
23+
slow = reverseList(slow);
24+
25+
int mx = 0;
26+
while(head && slow) {
27+
mx = max(mx, head->val + slow->val);
28+
head = head->next;
29+
slow = slow->next;
30+
}
31+
32+
return mx;
33+
}
34+
private:
35+
ListNode* reverseList(ListNode* head) {
36+
ListNode* prev = NULL;
37+
ListNode* curr = head;
38+
ListNode* NEXT = NULL;
39+
40+
while(curr) {
41+
NEXT = curr->next;
42+
curr->next = prev;
43+
prev = curr;
44+
curr = NEXT;
45+
}
46+
47+
return prev;
48+
}
49+
};
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// Time: O(N * logN)
2+
// Space: O(N)
3+
4+
class Solution {
5+
public:
6+
vector<int> successfulPairs(vector<int>& spells, vector<int>& potions, long long success) {
7+
sort(potions.begin(), potions.end());
8+
9+
int n = spells.size();
10+
int m = potions.size();
11+
vector<int> pairs(n);
12+
13+
for(int i = 0; i < n; i++) {
14+
int spell = spells[i];
15+
16+
int start = 0, end = m - 1;
17+
int curr;
18+
19+
while(start <= end) {
20+
curr = start + (end-start)/2;
21+
long long strength = (long long)potions[curr] * (long long)spell;
22+
if(strength < success) {
23+
start = curr + 1;
24+
}
25+
else {
26+
end = curr - 1;
27+
}
28+
}
29+
pairs[i] = m - start;
30+
}
31+
32+
return pairs;
33+
}
34+
};

java/0074-search-a-2d-matrix.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,13 @@ class Solution {
44
public boolean searchMatrix(int[][] matrix, int target) {
55
int i = 0, j = matrix[0].length - 1;
66
while (i < matrix.length && j >= 0) {
7-
if (matrix[i][j] == target) return true; else if (
8-
matrix[i][j] > target
9-
) j--; else i++;
7+
if (matrix[i][j] == target) {
8+
return true;
9+
} else if (matrix[i][j] > target) {
10+
j--;
11+
} else {
12+
i++;
13+
}
1014
}
1115
return false;
1216
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class Solution {
2+
public String mergeAlternately(String word1, String word2) {
3+
int i = 0;
4+
StringBuilder res = new StringBuilder();
5+
6+
while (i < word1.length() || i < word2.length()) {
7+
if (i < word1.length()) {
8+
res.append(word1.charAt(i));
9+
}
10+
if (i < word2.length()) {
11+
res.append(word2.charAt(i));
12+
}
13+
i++;
14+
}
15+
16+
return res.toString();
17+
}
18+
}
19+
20+
/**
21+
* Time Complexity : O(n+m)
22+
* Space Complexity : O(n+m)
23+
*/
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/**
2+
* Binary Search
3+
* https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array/
4+
* Time O(log(n)) | Space O(1)
5+
* @param {number[]} nums
6+
* @param {number} target
7+
* @return {number[]}
8+
*/
9+
var searchRange = function(nums, target) {
10+
11+
const result = [];
12+
13+
result.push(binarySearch(true, nums, target));
14+
result.push(binarySearch(false, nums, target));
15+
16+
return result;
17+
};
18+
19+
var binarySearch = (isLeftBias, nums, target) => {
20+
let left = 0;
21+
let right = nums.length - 1;
22+
let index = -1;
23+
24+
while(left <= right) {
25+
26+
const mid = (left + right) >> 1;
27+
28+
if(target > nums[mid]) {
29+
left = mid+1;
30+
}
31+
if(target < nums[mid]) {
32+
right = mid-1;
33+
}
34+
35+
const isTarget = target === nums[mid];
36+
if(isTarget) {
37+
if(isLeftBias) {
38+
index = mid;
39+
right = mid - 1;
40+
} else {
41+
index = mid;
42+
left = mid + 1;
43+
}
44+
}
45+
}
46+
return index;
47+
}

0 commit comments

Comments
 (0)