File tree Expand file tree Collapse file tree 5 files changed +80
-0
lines changed
product-of-array-except-self Expand file tree Collapse file tree 5 files changed +80
-0
lines changed Original file line number Diff line number Diff line change
1
+ # O(T) time, O(C^T) space
2
+ class Solution :
3
+ def combinationSum (self , candidates : List [int ], target : int ) -> List [List [int ]]:
4
+ results , nums = [], []
5
+
6
+ def dfs (start , total ):
7
+ if total > target :
8
+ return
9
+ if total == target :
10
+ results .append (nums [:])
11
+ for i in range (start , len (candidates )):
12
+ num = candidates [i ]
13
+ nums .append (num )
14
+ dfs (i , total + num )
15
+ nums .pop ()
16
+
17
+ dfs (0 , 0 )
18
+
19
+ return results
Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def maxSubArray (self , nums : List [int ]) -> int :
3
+ num_set = {}
4
+ result = - math .inf
5
+
6
+ for idx , num in enumerate (nums ):
7
+ if idx == 0 :
8
+ num_set [idx ] = max (nums [0 ], result )
9
+ else :
10
+ num_set [idx ] = max (num , num_set [idx - 1 ] + num )
11
+ tmp_sum = num_set [idx ]
12
+ result = max (result , tmp_sum )
13
+
14
+ return result
Original file line number Diff line number Diff line change
1
+ # O(n) time, O(n) space
2
+ class Solution :
3
+ def productExceptSelf (self , nums : List [int ]) -> List [int ]:
4
+ non_zero_product = math .prod (filter (lambda x : x != 0 , nums ))
5
+ raw_product = math .prod (nums )
6
+ zero_total = nums .count (0 )
7
+
8
+ result = []
9
+
10
+ for num in nums :
11
+ if zero_total > 1 :
12
+ result .append (0 )
13
+ elif zero_total == 1 :
14
+ if num == 0 :
15
+ result .append (non_zero_product )
16
+ else :
17
+ result .append (raw_product )
18
+ else :
19
+ result .append (raw_product // num )
20
+
21
+ return result
Original file line number Diff line number Diff line change
1
+ # O(1) time, O(1) space
2
+ class Solution :
3
+ def reverseBits (self , n : int ) -> int :
4
+ stack = []
5
+ while len (stack ) < 32 :
6
+ stack .append (n % 2 )
7
+ n //= 2
8
+
9
+ result , scale = 0 , 1
10
+ while stack :
11
+ result += stack .pop () * scale
12
+ scale *= 2
13
+
14
+ return result
Original file line number Diff line number Diff line change
1
+ # O(n) time, O(n) space
2
+
3
+ class Solution :
4
+ def twoSum (self , nums : List [int ], target : int ) -> List [int ]:
5
+ num_set = {}
6
+
7
+ for idx , num in enumerate (nums ):
8
+ other_num = target - num
9
+ if other_num in num_set :
10
+ return [idx , num_set [other_num ]]
11
+ else :
12
+ num_set [num ] = idx
You can’t perform that action at this time.
0 commit comments