奇安信 2021.08.07 代码题 Go 实现
#奇安信笔试#
奇安信 2021.08.07 代码题 Go 实现
1. 三重循环 100% 居然没超时
package main
// TeamNums 相当于求递增、递减序列的个数
func TeamNums( height []int ) int {
// 暴力应该会超时
// 居然没超时
res := 0
for i := 0; i < len(height); i++ {
for j := i + 1; j < len(height); j++ {
for k := j + 1; k < len(height); k++ {
if isOrder(height[i], height[j], height[k]) {
res++
}
}
}
}
return res
}
func isOrder(a, b, c int) bool {
if a > b && b > c {
return true
}
if a < b && b < c {
return true
}
return false
} package main
import "fmt"
func getMaximumResource( grid [][]int ) int {
// 应该是dfs
M := -1 << 10
var dfs func(i, j int) int
dfs = func(i, j int) int {
res := 0
// 边界
if i < 0 || j < 0 || i >= len(grid) || j >= len(grid[0]){
return 0
}
if grid[i][j] == 0 {
return 0
} else {
// 四个方向
res += grid[i][j]
grid[i][j] = 0
tmp := res
// 这里的选择有问题
res = max(res, tmp + dfs(i-1, j))
res = max(res, tmp + dfs(i+1, j))
res = max(res, tmp + dfs(i, j-1))
res = max(res, tmp + dfs(i, j+1))
}
return res
}
for i := 0; i < len(grid); i++ {
for j := 0; j < len(grid[0]); j++ {
M = max(M, dfs(i, j))
}
}
return M
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
func main() {
grid := [][]int{{0,6,0},{5,8,7},{0,9,0}}
fmt.Println(getMaximumResource(grid))
} 