Skip to content

Commit 9f4de7c

Browse files
author
Fatih
committed
Fixed merge conflicts, Added two go solutions
1 parent 0a5be0c commit 9f4de7c

File tree

2 files changed

+81
-0
lines changed

2 files changed

+81
-0
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
func threeSum(nums []int) [][]int {
2+
n := len(nums)
3+
4+
// Sort the given array
5+
sort.Ints(nums)
6+
7+
var result [][]int
8+
for num1Idx := 0; num1Idx < n-2; num1Idx++ {
9+
// Skip all duplicates from left
10+
// num1Idx>0 ensures this check is made only from 2nd element onwards
11+
if num1Idx > 0 && nums[num1Idx] == nums[num1Idx-1] {
12+
continue
13+
}
14+
15+
num2Idx := num1Idx + 1
16+
num3Idx := n - 1
17+
for num2Idx < num3Idx {
18+
sum := nums[num2Idx] + nums[num3Idx] + nums[num1Idx]
19+
if sum == 0 {
20+
// Add triplet to result
21+
result = append(result, []int{nums[num1Idx], nums[num2Idx], nums[num3Idx]})
22+
23+
num3Idx--
24+
25+
// Skip all duplicates from right
26+
for num2Idx < num3Idx && nums[num3Idx] == nums[num3Idx+1] {
27+
num3Idx--
28+
}
29+
} else if sum > 0 {
30+
// Decrement num3Idx to reduce sum value
31+
num3Idx--
32+
} else {
33+
// Increment num2Idx to increase sum value
34+
num2Idx++
35+
}
36+
}
37+
}
38+
return result
39+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
func levelOrder(root *TreeNode) [][]int {
2+
// nil check
3+
if root == nil {
4+
return nil
5+
}
6+
7+
var result [][]int
8+
level := 0
9+
q := make([]*TreeNode,1)
10+
q[0] = root
11+
for len(q) > 0 {
12+
curLen := len(q)
13+
//add elements to the queue per level
14+
for i := 0; i < curLen; i++ {
15+
//queue implementation : delete element from front(1st element of slice)
16+
node := q[0]
17+
q = q[1:]
18+
19+
if len(result) <= level {
20+
//create new slice with first value of the level and append to result matrix
21+
result = append(result,[]int{node.Val})
22+
}else {
23+
//add values to the slice created per level
24+
result[level] = append(result[level],node.Val)
25+
}
26+
27+
//queue implementation : add element at Back( after last element of slice by append)
28+
//add left node at queue
29+
if node.Left != nil {
30+
q = append(q,node.Left)
31+
}
32+
//add Right node at queue
33+
if node.Right != nil{
34+
q = append(q,node.Right)
35+
}
36+
}
37+
//increment the level after adding current elements to result
38+
level++
39+
}
40+
return result
41+
42+
}

0 commit comments

Comments
 (0)