add new solutions

This commit is contained in:
kanna5 2026-01-05 16:48:03 +09:00
parent 0c73608ce5
commit d798d5e8c9
Signed by: kkyy
GPG key ID: 06332F3965E9B0CF
19 changed files with 661 additions and 4 deletions

View 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

View 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

View 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