Skip to content

Commit 3ce776a

Browse files
committed
minor shits
1 parent ee490c1 commit 3ce776a

File tree

10 files changed

+157
-9
lines changed

10 files changed

+157
-9
lines changed

backtrack/anagram.py

Whitespace-only changes.

backtrack/combination_sum.py

Whitespace-only changes.

backtrack/palindrome_partitioning.py

Whitespace-only changes.

backtrack/permute.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# Given a collection of distinct numbers, return all possible permutations.
2+
3+
# For example,
4+
# [1,2,3] have the following permutations:
5+
# [
6+
# [1,2,3],
7+
# [1,3,2],
8+
# [2,1,3],
9+
# [2,3,1],
10+
# [3,1,2],
11+
# [3,2,1]
12+
# ]
13+
14+
def permute(nums):
15+
perms = [[]]
16+
for n in nums:
17+
new_perms = []
18+
for perm in perms:
19+
for i in range(len(perm)+1):
20+
new_perms.append(perm[:i] + [n] + perm[i:]) ###insert n
21+
print(i, perm[:i], [n], perm[i:], ">>>>", new_perms)
22+
perms = new_perms
23+
return perms
24+
25+
# DFS Version
26+
# def permute(nums):
27+
# res = []
28+
# dfs(res, nums, [])
29+
# return res
30+
31+
# def dfs(res, nums, path):
32+
# if not nums:
33+
# res.append(path)
34+
# for i in range(len(nums)):
35+
# print(nums[:i]+nums[i+1:])
36+
# dfs(res, nums[:i]+nums[i+1:], path+[nums[i]])
37+
38+
test = [1,2,3]
39+
print(test)
40+
print(permute(test))

backtrack/permute_unique.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Given a collection of numbers that might contain duplicates,
2+
# return all possible unique permutations.
3+
4+
# For example,
5+
# [1,1,2] have the following unique permutations:
6+
# [
7+
# [1,1,2],
8+
# [1,2,1],
9+
# [2,1,1]
10+
# ]
11+
12+
def permute_unique(nums):
13+
perms = [[]]
14+
for n in nums:
15+
new_perms = []
16+
for l in perms:
17+
for i in range(len(l)+1):
18+
new_perms.append(l[:i]+[n]+l[i:])
19+
if i<len(l) and l[i]==n:
20+
break #handles duplication
21+
perms = new_perms
22+
return perms
23+
24+

backtrack/subsets.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# Given a set of distinct integers, nums, return all possible subsets.
2+
3+
# Note: The solution set must not contain duplicate subsets.
4+
5+
# For example,
6+
# If nums = [1,2,3], a solution is:
7+
8+
# [
9+
# [3],
10+
# [1],
11+
# [2],
12+
# [1,2,3],
13+
# [1,3],
14+
# [2,3],
15+
# [1,2],
16+
# []
17+
# ]
18+
19+
20+
def subsets(nums):
21+
res = []
22+
backtrack(res, nums, [], 0)
23+
return res
24+
25+
def backtrack(res, nums, stack, pos):
26+
if pos == len(nums):
27+
res.append(list(stack))
28+
else:
29+
# take nums[pos]
30+
stack.append(nums[pos])
31+
backtrack(res, nums, stack, pos+1)
32+
stack.pop()
33+
# dont take nums[pos]
34+
backtrack(res, nums, stack, pos+1)
35+
36+
37+
# simplified backtrack
38+
39+
# def backtrack(res, nums, cur, pos):
40+
# if pos >= len(nums):
41+
# res.append(cur)
42+
# else:
43+
# backtrack(res, nums, cur+[nums[pos]], pos+1)
44+
# backtrack(res, nums, cur, pos+1)
45+
46+
47+
test = [1,2,3]
48+
print(test)
49+
print(subsets(test))

backtrack/subsets_unique.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# Given a collection of integers that might contain duplicates, nums,
2+
# return all possible subsets.
3+
4+
# Note: The solution set must not contain duplicate subsets.
5+
6+
# For example,
7+
# If nums = [1,2,2], a solution is:
8+
9+
# [
10+
# [2],
11+
# [1],
12+
# [1,2,2],
13+
# [2,2],
14+
# [1,2],
15+
# []
16+
# ]
17+
18+
def subsets_unique(nums):
19+
res = set()
20+
backtrack(res, nums, [], 0)
21+
return list(res)
22+
23+
def backtrack(res, nums, stack, pos):
24+
if pos == len(nums):
25+
res.add(tuple(stack))
26+
else:
27+
# take
28+
stack.append(nums[pos])
29+
backtrack(res, nums, stack, pos+1)
30+
stack.pop()
31+
32+
# don't take
33+
backtrack(res, nums, stack, pos+1)
34+
35+
36+
test = [1,2,2]
37+
print(test)
38+
print(subsets_unique(test))

search/binary_search.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1+
2+
13
def binary_search(array, query):
24
lo, hi = 0, len(array) - 1
35
while lo <= hi:
4-
print("--------")
56
mid = lo + (hi - lo) // 2
6-
print("lo: ", lo)
7-
print("hi: ", hi)
8-
print("mid: ", mid)
97
val = array[mid]
108
if val == query:
119
return mid

sorting/merge_sort.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,12 @@ def merge_sort(arr):
22
""" Merge Sort
33
Complexity: O(n log(n))
44
"""
5-
size = len(arr)
6-
half = size/2
75
# Our recursive base case
8-
if size <= 1:
6+
if len(arr)<= 1:
97
return arr
8+
mid = len(arr)/2
109
# Perform merge_sort recursively on both halves
11-
left, right = merge_sort(arr[half:]), merge_sort(arr[:half])
10+
left, right = merge_sort(arr[mid:]), merge_sort(arr[:mid])
1211

1312
# Merge each side together
1413
return merge(left, right)

string/reverse_words.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ def reverse_words(string):
1111
reverse(arr, 0, n-1)
1212

1313
start = None
14-
for i in range(n-1):
14+
for i in range(n):
1515
if arr[i] == " ":
1616
if start:
1717
reverse(arr, start, i-1)

0 commit comments

Comments
 (0)