Skip to content

Commit

Permalink
Merge branch 'main' into main
Browse files Browse the repository at this point in the history
  • Loading branch information
Ahmad-A0 authored Sep 30, 2022
2 parents e1c9858 + 77f932e commit 6bf5d65
Show file tree
Hide file tree
Showing 12 changed files with 257 additions and 9 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ If you would like to have collaborator permissions on the repo to merge your own
<sub>[102 - Binary Tree Level Order Traversal](https://leetcode.com/problems/binary-tree-level-order-traversal/)</sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub>
<sub>[199 - Binary Tree Right Side View](https://leetcode.com/problems/binary-tree-right-side-view/)</sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub>
<sub>[1448 - Count Good Nodes in a Binary Tree](https://leetcode.com/problems/count-good-nodes-in-binary-tree/)</sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub>

<sub>[98 - Validate Binary Search Tree](https://leetcode.com/problems/validate-binary-search-tree/)</sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub>
<sub>[230 - Kth Smallest Element in a BST](https://leetcode.com/problems/kth-smallest-element-in-a-bst/)</sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub>
<sub>[105 - Construct Tree from Preorder and Inorder Traversal](https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/)</sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>✔️</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>✔️</div></sub>
Expand Down
51 changes: 51 additions & 0 deletions c/76-Minimum-Window-Substring.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
/*
Given two strings s and t of lengths m and n respectively, return the minimum window substring of s such that every
character in t (including duplicates) is included in the window. If there is no such substring, return the empty string "".
Space: O(1)
Time: O(n+m) where n is the length of s and m the length of t
*/

char * minWindow(char * s, char * t){
int alpha[59] = {0};
int need = 0;
for (int i=0; t[i]!='\0'; i++) { // Initialise the alphabet
if (alpha[t[i]-'A']==0)
need++;
alpha[t[i]-'A']--;
}
int maxLen = 100001;
int pos=0;
int i=0, j=0;
while (s[j]!='\0') {
alpha[s[j]-'A']++;
if (alpha[s[j]-'A']==0) {
need--;
if (need==0) {
while (alpha[s[i]-'A']>0) {
alpha[s[i]-'A']--;
i++;
}
if ((j-i+1)<maxLen) {
pos = i;
maxLen = j-i+1;
}
alpha[s[i]-'A']--;
need++;
i++;
}
}
j++;
}

if (maxLen==100001) { // No substring found
char* ans = malloc(sizeof(char));
ans[0] = '\0';
return ans;
} else {
char* ans = malloc(sizeof(char)*(maxLen+1));
for (int i=0; i<maxLen; i++)
ans[i] = s[i+pos];
ans[maxLen] = '\0';
return ans;
}
}
2 changes: 1 addition & 1 deletion cpp/953-Alien-Dictionary.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class Solution {

// indegree make all char 0
for(auto word : words){
for(auto c : st){
for(auto c : word){
indegree[c]=0;
}
}
Expand Down
44 changes: 44 additions & 0 deletions csharp/1851-Minimum-Interval-to-Include-Each-Query.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
public class Solution
{
public int[] MinInterval(int[][] intervals, int[] queries)
{

var q = queries.Length;
var indexDict = new int[q][];
var index = 0;
foreach (var query in queries)
{
indexDict[index] = new int[2] { query, index };
index++;
}
Array.Sort(indexDict, (a, b) => a[0] - b[0]);
Array.Sort(intervals, (a, b) => a[0] - b[0]);

var pq = new PriorityQueue<int[], int>();
var result = new int[queries.Length];

index = 0;
foreach (var query in indexDict)
{
var resultIndex = query;
var calResult = -1;

while (index < intervals.Length && intervals[index][0] <= resultIndex[0])
{
var curr = intervals[index];
pq.Enqueue(new int[2] { curr[1] - curr[0] + 1, curr[1] }, curr[1] - curr[0] + 1);
index++;
}

while (pq.Count > 0 && pq.Peek()[1] < resultIndex[0])
{
pq.Dequeue();
}
calResult = pq.Count > 0 ? pq.Peek()[0] : -1;
result[resultIndex[1]] = calResult;
}

return result;

}
}
26 changes: 26 additions & 0 deletions csharp/46-Permutations.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
public class Solution
{
public IList<IList<int>> Permute(int[] nums)
{
var result = new List<IList<int>>();
PermuteRecurse(result, nums, 0);
return result;
}

private void PermuteRecurse(List<IList<int>> res, int[] arr, int start)
{
if (start == arr.Length)
{
var list = arr.Select(t => (t)).ToList();
res.Add(list);
return;
}

for (var i = start; i < arr.Length; i++)
{
(arr[start], arr[i]) = (arr[i], arr[start]);
PermuteRecurse(res, arr, start + 1);
(arr[start], arr[i]) = (arr[i], arr[start]);
}
}
}
4 changes: 1 addition & 3 deletions csharp/494-Target-Sum.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,4 @@ int dfs(int index, int total){
return mem[(index, total)];
}

return dfs(0,0);
}
}
return dfs(0,0);
22 changes: 22 additions & 0 deletions go/230-Kth-Smallest-Element-in-a-BST.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
func kthSmallest(root *TreeNode, k int) int {
stack := make([]*TreeNode, 0, k)

for {
for root != nil {
stack = append(stack, root)
root = root.Left
}

root = stack[len(stack) - 1]
stack = stack[:len(stack) - 1]

k--
if k == 0 {
return root.Val
}

root = root.Right
}

return -1
}
19 changes: 19 additions & 0 deletions go/98-Validate-Binary-Search-Tree.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
func isValidBST(root *TreeNode) bool {
return isValid(root, nil, nil)
}

func isValid(root, min, max *TreeNode) bool {
if root == nil {
return true
}

if min != nil && root.Val <= min.Val {
return false
}

if max != nil && root.Val >= max.Val {
return false
}

return isValid(root.Left, min, root) && isValid(root.Right, root, max)
}
41 changes: 41 additions & 0 deletions kotlin/329-Longest-Increasing-Path-In-A-Matrix.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
class Solution {
fun longestIncreasingPath(matrix: Array<IntArray>): Int {
val m = matrix.size
val n = matrix[0].size
val memo = Array<IntArray>(m){IntArray(n)}
val dirs = arrayOf(intArrayOf(-1,0),intArrayOf(1,0),intArrayOf(0,1),intArrayOf(0,-1))
var res = 1

for (i in 0..m-1) {
for (j in 0..n-1) {
val len = dfs(matrix, i, j, dirs, memo)
res = Math.max(res, len)
}
}

return res
}

fun dfs(matrix: Array<IntArray>, row: Int, col: Int, dirs: Array<IntArray>, memo: Array<IntArray>): Int {
val m = matrix.size
val n = matrix[0].size

if (memo[row][col] != 0)
return memo[row][col]

var len = 1

for (dir in dirs) {
val x = dir[0] + row
val y = dir[1] + col

if (x < 0 || x == m || y < 0 || y == n || matrix[row][col] >= matrix[x][y])
continue

len = Math.max(len, 1+dfs(matrix, x, y, dirs, memo))
}

memo[row][col] = len
return len
}
}
10 changes: 5 additions & 5 deletions python/875-Koko-Eating-Bananas.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
class Solution:
def minEatingSpeed(self, piles: List[int], h: int) -> int:
l, r = 1, max(piles)
k = 0
res = max(piles)

while l <= r:
m = (l + r) // 2
k = (l + r) // 2

totalTime = 0
for p in piles:
totalTime += ((p - 1) // m) + 1
totalTime += math.ceil(p / k)
if totalTime <= h:
k = m
res = min(res, k)
r = m - 1
else:
l = m + 1
return k
return res
13 changes: 13 additions & 0 deletions ruby/0053-Maximum-Subarray.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
def max_sub_array(nums)
sum = 0
max = -10 * 10 * 10 * 10 - 1

nums.each do |num|
sum += num
max = sum > max ? sum : max

sum = 0 if sum < 0
end

max
end
33 changes: 33 additions & 0 deletions ruby/17-Letter-Combinations-Of-A-Phone-Number.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
$MAP = {
2 => %w(a b c),
3 => %w(d e f),
4 => %w(g h i),
5 => %w(j k l),
6 => %w(m n o),
7 => %w(p q r s),
8 => %w(t u v),
9 => %w(w x y z)
}

# @param {String} digits
# @return {String[]}
def letter_combinations(digits)
ans = []

recurse(digits, "", ans, 0) unless digits.empty?

ans
end

def recurse(digits, prefix, ans, i)
if digits.length == prefix.length
ans << prefix
return
end

digit = digits[i].to_i

$MAP[digit].each do |c|
recurse(digits, prefix + c, ans, i + 1)
end
end

0 comments on commit 6bf5d65

Please sign in to comment.