Skip to content

Commit 93e67a6

Browse files
authored
Add files via upload
1 parent b7b8d6d commit 93e67a6

38 files changed

+1790
-0
lines changed

001_twosum.py

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
num = [3,2,4,15]
2+
targets = 6
3+
4+
# def twoSum(nums, target):
5+
# n = len(nums)
6+
# order = []
7+
# for i in range (0, n-1):
8+
# for j in range (i+1, n):
9+
# sumTwo = nums[i] + nums[j]
10+
# if sumTwo == target:
11+
# order.append(i)
12+
# order.append(j)
13+
# return order
14+
15+
16+
#using hashmap to reduce time complexity from n^2 to n
17+
def twoSum(nums, target):
18+
hash_map = {}
19+
n = len(nums)
20+
for i in range (0, n):
21+
t = target - nums[i]
22+
if t not in hash_map:
23+
hash_map[nums[i]] = i
24+
print(hash_map)
25+
else:
26+
return [hash_map[t], i]
27+
28+
print(twoSum(num, targets))

002_add2nums.py

+124
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
class ListNode:
2+
def __init__(self, val=0, next=None):
3+
4+
self.val = val
5+
self.next = next
6+
7+
8+
class Solution:
9+
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
10+
head = ListNode()
11+
p = head
12+
hud = 0
13+
14+
# p.next l1.next l2.next
15+
while l1 and l2:
16+
17+
unt = int((l1.val + l2.val + hud) % 10)
18+
hud = int((l1.val + l2.val + hud) / 10)
19+
20+
p.next = ListNode(unt)
21+
p = p.next
22+
l1 = l1.next
23+
l2 = l2.next
24+
while l1:
25+
unt = int((l1.val + hud) % 10)
26+
hud = int((l1.val + hud) / 10)
27+
p.next = ListNode(unt)
28+
p = p.next
29+
l1 = l1.next
30+
while l2:
31+
unt = int((l2.val + hud) % 10)
32+
hud = int((l2.val + hud) / 10)
33+
p.next = ListNode(unt)
34+
p = p.next
35+
l2 = l2.next
36+
if hud != 0:
37+
p.next = ListNode(1)
38+
39+
res = []
40+
while head.next:
41+
res.append(head.val)
42+
head = head.next
43+
44+
return res
45+
46+
def addTwoNumbers_demo(self, l1: ListNode, l2: ListNode) -> ListNode:
47+
head = ListNode()
48+
p = head
49+
carry = 0
50+
51+
while l1 or l2 or carry:
52+
53+
if l1:
54+
carry = carry + l1.val
55+
l1 = l1.next
56+
if l2:
57+
carry = carry + l2.val
58+
l2 = l2.next
59+
60+
p.next = ListNode(int(carry % 10))
61+
p = p.next
62+
carry = int(carry / 10)
63+
64+
res = []
65+
while head.next:
66+
res.append(head.val)
67+
head = head.next
68+
69+
return res
70+
71+
#p1_3 = ListNode(3)
72+
#p1_2 = ListNode(4, p1_3)
73+
p1_2 = ListNode(4)
74+
p1_1 = ListNode(2, p1_2)
75+
76+
77+
p2_3 = ListNode(4)
78+
p2_2 = ListNode(6, p2_3)
79+
p2_1 = ListNode(5, p2_2)
80+
81+
p3_1 = ListNode(0)
82+
p3_2 = ListNode(0)
83+
84+
print(Solution().addTwoNumbers_demo(p1_1, p2_1))
85+
print(Solution().addTwoNumbers_demo(p3_1, p3_1))
86+
87+
88+
89+
# print(addTwoNumbers(l1 = [9,9,9,9], l2 = [9]))
90+
# print(addTwoNumbers(l1 = [2,4,3], l2 = [5,6,4]))
91+
# print(addTwoNumbers(l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]))
92+
93+
94+
95+
96+
97+
98+
99+
100+
101+
102+
103+
104+
def addTwoNumbers_list(l1, l2):
105+
106+
n = max(len(l1), len(l2)) + 1
107+
for i in range(0, n - len(l1)):
108+
l1.append(0)
109+
for j in range(0, n - len(l2)):
110+
l2.append(0)
111+
res = [0] * n
112+
tmp = 0
113+
#print(l1,l2)
114+
for k in range(0, n):
115+
116+
res[k] = int((l1[k] + l2[k] + tmp) % 10)
117+
118+
tmp = int((l1[k] + l2[k] + tmp) / 10)
119+
if res[-1] == 0:
120+
res.pop()
121+
return res
122+
123+
124+

003_substrXrepeat.py

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
class Solution:
2+
def lengthOfLongestSubstring(self, s: str) -> int:
3+
dict_sub = {}
4+
n = len(s)
5+
if n == 1:
6+
return 1
7+
left = 0
8+
len_sub = 0
9+
for right in range(0, n):
10+
if s[right] in dict_sub:
11+
left = max(left, dict_sub[s[right]] + 1)
12+
len_sub = max(len_sub, right - left + 1)
13+
dict_sub[s[right]] = right
14+
15+
16+
return len_sub
17+
18+
19+
20+
21+
print(Solution().lengthOfLongestSubstring(s = "abcabcbb")) #3
22+
print(Solution().lengthOfLongestSubstring(s = "bbbbb")) #1
23+
print(Solution().lengthOfLongestSubstring(s = "pwwkew")) #3
24+
print(Solution().lengthOfLongestSubstring(s = "dvdf")) #3
25+
print(Solution().lengthOfLongestSubstring(s = "")) #0
26+
print(Solution().lengthOfLongestSubstring(s = " ")) #1
27+
print(Solution().lengthOfLongestSubstring(s ="tmmzuxt")) #5
28+
29+
30+
31+
32+
33+

004_median2array.py

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
#it didnt satisfy the time complexity log(m+n)
2+
class Solution:
3+
def findMedianSortedArrays_myway(self, nums1, nums2):
4+
merge_num = sorted(nums1 + nums2)
5+
n = len(merge_num)
6+
if n % 2 != 0:
7+
return merge_num[n//2]
8+
else:
9+
return sum(merge_num[n // 2 - 1 : n // 2 + 1])/2.0
10+
11+
def findMedianSortedArrays(self, nums1, nums2):
12+
m, n = len(nums1), len(nums2)
13+
if m > n:
14+
nums1, nums2, m, n = nums2, nums1, n, m
15+
if n == 0:
16+
raise ValueError
17+
18+
imin, imax, half_len = 0, m, (m + n + 1) // 2
19+
while imin <= imax:
20+
i = (imin + imax) // 2
21+
j = half_len - i
22+
if i < m and nums2[j - 1] > nums1[i]:
23+
imin = i + 1
24+
elif i > 0 and nums1[i - 1] > nums2[j]:
25+
imax = i - 1
26+
else:
27+
if i == 0: max_of_left = nums2[j - 1]
28+
elif j == 0: max_of_left = nums1[i - 1]
29+
else: max_of_left = max(nums1[i - 1], nums2[j - 1])
30+
31+
if (m + n) % 2 == 1:
32+
return max_of_left
33+
34+
if i == m: min_of_right = nums2[j]
35+
elif j == n: min_of_right = nums1[i]
36+
else: min_of_right = min(nums1[i], nums2[j])
37+
38+
return (max_of_left + min_of_right) / 2.0
39+
40+
41+
42+
43+
print(Solution().findMedianSortedArrays(nums1 = [1,3], nums2 = [2]))
44+
print(Solution().findMedianSortedArrays(nums1 = [0,0], nums2 = [0,0]))
45+
print(Solution().findMedianSortedArrays(nums1 = [1,2], nums2 = [3,4]))
46+
print(Solution().findMedianSortedArrays(nums1 = [], nums2 = [1]))
47+
print(Solution().findMedianSortedArrays(nums1 = [2], nums2 = []))

005_palindromicSub.py

+103
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
class Solution:
2+
def longestPalindrome(self, s: str) -> str:
3+
n = len(s)
4+
res = []
5+
for i in range (0, n):
6+
# if i == 3:
7+
# print(res)
8+
9+
temp_odd = []
10+
temp_even = []
11+
temp = []
12+
13+
14+
j = 0
15+
temp_odd.append(s[i])
16+
while (s[i - j] == s[i + j]):
17+
if j != 0:
18+
temp_odd.append(s[i + j])
19+
temp_odd.insert(0, s[i - j])
20+
j = j + 1
21+
if (i - j < 0 or i + j >= n):
22+
break
23+
24+
25+
26+
j = 0
27+
if i + 1 < n and s[i] == s[i + 1]:
28+
temp_even.append(s[i])
29+
temp_even.append(s[i + 1])
30+
while(s[i - j] == s[i + 1 + j]):
31+
if j != 0:
32+
temp_even.insert(0, s[i - j])
33+
temp_even.append(s[i + 1 + j])
34+
j = j + 1
35+
if i - j < 0 or i + j + 1 >= n:
36+
break
37+
38+
if len(temp_odd) >= len(temp_even):
39+
temp = temp_odd
40+
else:
41+
temp = temp_even
42+
if len(temp) > len(res):
43+
res = temp
44+
45+
return "".join(res)
46+
47+
def longestPalindrome_demo(self, s: str) -> str:
48+
res = ''
49+
n = len(s)
50+
for i in range(0, n):
51+
for j in range(n, i, -1):
52+
if len(res) >= j - i:
53+
break
54+
elif s[i: j] == s[i: j][::-1]:
55+
res = s[i: j]
56+
57+
return res
58+
59+
60+
61+
62+
63+
print(Solution().longestPalindrome_demo(s = "bananas")) #anana
64+
print(Solution().longestPalindrome_demo(s = "cbaabf")) #baab
65+
print(Solution().longestPalindrome_demo(s = "babad"))
66+
print(Solution().longestPalindrome_demo(s = "bbbbb"))
67+
print(Solution().longestPalindrome(s = "cbbd"))
68+
print(Solution().longestPalindrome(s = "a"))
69+
print(Solution().longestPalindrome(s = "ac"))
70+
print(Solution().longestPalindrome(s = "abracadabra"))
71+
print(Solution().longestPalindrome(s = "aba"))
72+
print(Solution().longestPalindrome_demo(s = "abba"))
73+
print(Solution().longestPalindrome_demo(s = "level"))
74+
75+
76+
77+
78+
79+
80+
81+
# def longestPalindrome_demo(self, s: str) -> str:
82+
83+
# T = '#'.join('^{}$'.format(s))
84+
# # T = s
85+
# P = [0] * len(T)
86+
# R, C = 0, 0
87+
# for i in range(1,len(T) - 1):
88+
# if i < R:
89+
# P[i] = min(P[2 * C - i], R - i)
90+
91+
# while T[i+(P[i]+1)] == T[i-(P[i]+1)]:
92+
# P[i] += 1
93+
94+
# if i + P[i] > R:
95+
# R, C = i + P[i], i
96+
# return P
97+
98+
99+
100+
101+
102+
103+

006_zigzag.py

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
class Solution:
2+
def convert(self, s: str, numRows: int) -> str:
3+
res = ''
4+
l = 2 * numRows - 2
5+
if l == 0:
6+
return s
7+
for i in range (0, numRows):
8+
temp = i
9+
while (i < len(s)):
10+
res = res + s[i]
11+
if (i % l) != 0 and (i % l) != (numRows - 1):
12+
if i + (numRows - temp - 1) * 2 < len(s):
13+
res = res + s[i + (numRows - temp - 1) * 2]
14+
15+
16+
i = i + l
17+
18+
19+
return res
20+
21+
22+
print(Solution().convert(s = "A", numRows = 1))
23+
24+
25+
#print(Solution().convert(s = "PAYPALISHIRING", numRows = 3)) #PAHNAPLSIIGYIR
26+
#print(Solution().convert(s = "PAYPALISHIRING", numRows = 4)) #PINALSIGYAHRPI

0 commit comments

Comments
 (0)