add new solutions
This commit is contained in:
parent
0c73608ce5
commit
d798d5e8c9
19 changed files with 661 additions and 4 deletions
21
solutions/2/q201/solution.go
Normal file
21
solutions/2/q201/solution.go
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
package q201
|
||||
|
||||
func rangeBitwiseAnd(left int, right int) int {
|
||||
ret := left & right
|
||||
for i := ret + 1; i < right; {
|
||||
ret &= i
|
||||
if ret == 0 {
|
||||
return 0
|
||||
}
|
||||
|
||||
// Find first non-zero bit
|
||||
t := 1
|
||||
for i|t != i {
|
||||
t <<= 1
|
||||
}
|
||||
i += t
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
var _ = rangeBitwiseAnd
|
||||
34
solutions/2/q210/solution.go
Normal file
34
solutions/2/q210/solution.go
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
package q210
|
||||
|
||||
func findOrder(numCourses int, prerequisites [][]int) []int {
|
||||
ndeps := make([]int, numCourses)
|
||||
revDeps := make([][]int, numCourses)
|
||||
ret := make([]int, 0, numCourses)
|
||||
|
||||
for i := range prerequisites {
|
||||
c, dep := prerequisites[i][0], prerequisites[i][1]
|
||||
ndeps[c]++
|
||||
revDeps[dep] = append(revDeps[dep], c)
|
||||
}
|
||||
|
||||
for i := range ndeps {
|
||||
if ndeps[i] == 0 {
|
||||
ret = append(ret, i)
|
||||
}
|
||||
}
|
||||
for i := 0; i < len(ret); i++ {
|
||||
for _, c := range revDeps[ret[i]] {
|
||||
ndeps[c]--
|
||||
if ndeps[c] == 0 {
|
||||
ret = append(ret, c)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if len(ret) != numCourses {
|
||||
return nil
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
var _ = findOrder
|
||||
41
solutions/2/q289/solution.go
Normal file
41
solutions/2/q289/solution.go
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
package q289
|
||||
|
||||
func countLiveNeighbors(board [][]int, row, col int) int {
|
||||
cnt := 0
|
||||
for r := row - 1; r <= row+1; r++ {
|
||||
for c := col - 1; c <= col+1; c++ {
|
||||
if r == row && c == col || r < 0 || c < 0 || r >= len(board) || c >= len(board[0]) {
|
||||
continue
|
||||
}
|
||||
cnt += board[r][c] & 1
|
||||
}
|
||||
}
|
||||
return cnt
|
||||
}
|
||||
|
||||
func gameOfLife(board [][]int) {
|
||||
for r := range board {
|
||||
for c := range board[r] {
|
||||
neighbors := countLiveNeighbors(board, r, c)
|
||||
if board[r][c]&1 == 1 {
|
||||
switch {
|
||||
case neighbors < 2 || neighbors > 3:
|
||||
// die
|
||||
default:
|
||||
board[r][c] |= 2 // survive
|
||||
}
|
||||
} else if neighbors == 3 {
|
||||
board[r][c] |= 2 // birth
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Next generation
|
||||
for r := range board {
|
||||
for c := range board[r] {
|
||||
board[r][c] >>= 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var _ = gameOfLife
|
||||
Loading…
Add table
Add a link
Reference in a new issue