Skip to content

Commit 9007b9b

Browse files
Merge pull request #1 from theforestvn88/june
june/2024 add 499 leetcode problems
2 parents 4cad06a + cae2643 commit 9007b9b

File tree

499 files changed

+11638
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

499 files changed

+11638
-0
lines changed

1-100/0001_two_sum.rb

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
def two_sum(nums, target)
2+
ans = []
3+
prev = Hash.new
4+
nums.each_with_index do |num, i|
5+
complement = target - num
6+
if prev.has_key?(complement)
7+
ans = [prev[complement], i]
8+
break
9+
end
10+
prev[num] = i
11+
end
12+
ans
13+
end

1-100/0002_add_two_numbers.rb

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Definition for singly-linked list.
2+
# class ListNode
3+
# attr_accessor :val, :next
4+
# def initialize(val = 0, _next = nil)
5+
# @val = val
6+
# @next = _next
7+
# end
8+
# end
9+
#
10+
def add_two_numbers(l1, l2)
11+
root = ListNode.new
12+
l = root; rem = 0
13+
14+
until l1.nil? && l2.nil? && rem.zero?
15+
sum = (l1&.val || 0) + (l2&.val || 0) + rem
16+
l = l.next = ListNode.new sum % 10
17+
rem = sum >= 10 ? 1 : 0
18+
l1 = l1&.next; l2 = l2&.next
19+
end
20+
21+
root.next
22+
end
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
def length_of_longest_substring(s)
2+
counter = Hash.new(0)
3+
left = right = 0
4+
max = 0
5+
6+
while right < s.length
7+
counter[s[right]] += 1
8+
until counter[s[right]] == 1
9+
counter[s[left]] -= 1
10+
left += 1
11+
end
12+
13+
right += 1
14+
if (len = right - left) > max then max = len end
15+
end
16+
17+
max
18+
end
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
def find_median_sorted_arrays(nums1, nums2)
2+
longer, shorter = nums1.length > nums2.length ? [nums1, nums2] : [nums2, nums1]
3+
4+
bs_left = 0
5+
bs_right = shorter.length
6+
divide_1 = 0
7+
divide_2 = 0
8+
until bs_left > bs_right
9+
divide_1 = (bs_left + bs_right) / 2
10+
divide_2 = (longer.length + shorter.length + 1) / 2 - divide_1
11+
if divide_1 < bs_right && longer[divide_2 - 1] > shorter[divide_1]
12+
bs_left = divide_1 + 1
13+
elsif divide_1 > bs_left && shorter[divide_1 - 1] > longer[divide_2]
14+
bs_right = divide_1 - 1
15+
else
16+
break
17+
end
18+
end
19+
20+
max_left = divide_1 == 0 ? longer[divide_2 - 1] : (divide_2 == 0 ? shorter[divide_1 - 1] : [shorter[divide_1 - 1], longer[divide_2 - 1]].max)
21+
return max_left if (longer.length + shorter.length)%2 == 1
22+
23+
min_right = [(shorter[divide_1] || Float::INFINITY), (longer[divide_2] || Float::INFINITY)].min
24+
return (max_left + min_right)/2.0
25+
end
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
def longest_palindrome(s)
2+
str = "^|#{s.chars.join("|")}|$"
3+
dp = Array.new(str.length, 0)
4+
i = 1; l = 1; r = 1; max = 0; max_i = -1
5+
6+
while i < str.length-1
7+
dp[i] = [0, [r-i, dp[l + r - i]].min].max
8+
while str[i - dp[i]] == str[i + dp[i]]
9+
dp[i] += 1
10+
end
11+
12+
if max < dp[i]
13+
max = dp[i]
14+
max_i = i
15+
end
16+
17+
if i + dp[i] > r
18+
r = i + dp[i]
19+
l = i - dp[i]
20+
end
21+
22+
i += 1
23+
end
24+
25+
s[((max_i - dp[max_i]) / 2)..((max_i - 1 + dp[max_i]) / 2 - 1)]
26+
end
27+

1-100/0006_zigzag_conversion.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
def convert(s, num_rows)
2+
return s if num_rows == 1
3+
4+
rows = Array.new(num_rows) { "" }
5+
cur_row = 0
6+
direction = 1
7+
8+
s.chars.each do |c|
9+
rows[cur_row] << c
10+
cur_row += direction
11+
direction *= -1 if cur_row == 0 || cur_row == num_rows-1
12+
end
13+
14+
rows.reduce("") { |converted, row| converted << row }
15+
end

1-100/0007_reverse_integer.rb

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
FIX_MAX = 2147483647
2+
FIX_MIN = -2147483648
3+
4+
def reverse(x)
5+
return 0 if x <= FIX_MIN || x > FIX_MAX + 1
6+
7+
sign = x < 0 ? -1 : 1;
8+
x = x.abs
9+
reverser = 0
10+
while x > 0
11+
reverser = (reverser * 10) + (x % 10)
12+
x = x / 10
13+
end
14+
15+
reverser = reverser * sign;
16+
reverser >= FIX_MIN && reverser <= FIX_MAX ? reverser : 0;
17+
end
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
FIX_MAX = 2147483647
2+
FIX_MIN = -2147483648
3+
ZERO = "0".ord
4+
5+
def my_atoi(s)
6+
atoi = nil
7+
sign = nil
8+
i = 0
9+
while i < s.length
10+
if s[i] >= "0" && s[i] <= "9"
11+
atoi ||= 0
12+
atoi = (atoi * 10) + (s[i].ord - ZERO)
13+
else
14+
break unless atoi.nil? && sign.nil?
15+
if s[i] == "+"
16+
sign = 1
17+
elsif s[i] == "-"
18+
sign = -1
19+
elsif s[i] != " "
20+
break
21+
end
22+
end
23+
i += 1
24+
end
25+
26+
atoi = (atoi || 0) * (sign || 1)
27+
atoi < FIX_MIN ? FIX_MIN : (atoi > FIX_MAX ? FIX_MAX : atoi)
28+
end

1-100/0009_palindrome_number.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
def is_palindrome(x)
2+
return false if x < 0
3+
4+
reverse = 0
5+
cp_x = x
6+
while x != 0
7+
reverse = reverse * 10 + x % 10
8+
x = x / 10
9+
end
10+
11+
reverse == cp_x
12+
end
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# @param {String} s
2+
# @param {String} p
3+
# @return {Boolean}
4+
def is_match(s, p)
5+
dp = Array.new(s.size + 1) { Array.new(p.size + 1) { false } }
6+
dp[0][0] = true
7+
8+
(0...p.size).each { |i|
9+
dp[0][i+1] = dp[0][i-1] if p[i] == "*"
10+
}
11+
12+
(0...s.size).each { |j|
13+
(0...p.size).each { |i|
14+
if p[i] == "*"
15+
dp[j+1][i+1] = dp[j+1][i-1] || ((p[i-1] == "." || p[i-1] == s[j]) && dp[j][i+1])
16+
else
17+
dp[j+1][i+1] = (p[i] == "." || p[i] == s[j]) && dp[j][i]
18+
end
19+
}
20+
}
21+
22+
dp[s.size][p.size]
23+
end

0 commit comments

Comments
 (0)