ARTS 第8周分享
[TOC]
Algorithm
八皇后问题
在 8 X 8 的网格中,放入八个皇后(棋子),满足的条件是,任意两个皇后(棋子)都不能处于同一行、同一列或同一斜线上,问有多少种摆放方式?
[思路]
- 假设坐标0,0就是第一个棋子的位置,然后在第二行第1列放第二个棋子判断是否满足设定的条件,如果不合适列号加1直到找到合适的位置。继续为下一个棋子找合适的位置
[参考代码]
func sortArrayByParityII(A []int) []int {
odds := make([]int, 0)
evens := makepackage main
import (
"fmt"
)
func main() {
cal8queens(0)
}
var result = make([]int, 9)
var n = 0
func cal8queens(row int) {
if row == 8 {
printQuees(result)
n++
return
}
for col := 0; col < 8; col++ {
if isOkCol(row, col) {
result[row] = col
cal8queens(row+1)
}
}
}
func isOkCol(row, col int) bool {
leftCol := col - 1
rightCol := col + 1
for i := row - 1; i >= 0; i-- {
if result[i] == col {
return false
}
if leftCol >= 0 {
if result[i] == leftCol {
return false
}
}
if leftCol < 8 {
if result[i] == rightCol {
return false
}
}
leftCol--
rightCol--
}
return true
}
func printQuees(result []int) {
for i:=0; i<8; i++ {
for j:=0; j<8; j++ {
if result[i] == j {
fmt.Print( "Q" + " ")
} else {
fmt.Print( "*" + " ")
}
}
fmt.Println()
}
fmt.Println("\n------------------\n")
}
([]int, 0)
// 遍历整个数组用连个容器,分别存储位置不对的奇数和偶数
for i, v := range A {
if i%2 == 0 && v%2 != 0 {
evens = append(evens, i)
} else if i%2 != 0 && v%2 == 0 {
odds = append(odds, i)
}
// 分别从两个容器中取出一个数据,进行位置互换
if len(odds) > 0 && len(evens) > 0 {
A[evens[0]], A[odds[0]] = A[odds[0]], A[evens[0]]
evens = evens[1:]
odds = odds[1:]
}
}
return A
}
Review
Part 28: Polymorphism - OOP in Go: https://golangbot.com/polymorphism/
- 关于golang如何通过interface实现多态性
Tips
Git 基础 - 打标签:
显示已有的标签:
- 显示全部:git tag
- 显示指定标签:git tag -l 'xxx.*' (正则匹配)
新建标签:
- 新建轻量级标签(lightweight):git tag tagName
- 新建含附注的标签(annotated):git tag -a tagName -m "附注"
删除标签:
- git tag -d tagName
查看标签具体信息:
- git show tagName
签署标签(signed):
- git tag -s tagName -m "附注"
验证标签(verify):
- git tag -v tagName
后期追加标签:
- 先找到指定的版本号
- git tag tagName 版本号/ git tag -a tagName 版本号
上传标签
- 单个标签:git push origin tagName
- 所有标签:git push origin --tags/--follow-tags
Share
学习数据结构的框架思维: https://mp.weixin.qq.com/s/KVRAPMnVLoyy6p0n3SbMJA
数据结构的构成:由底层基础构造复杂上层结构
- 最基础的结构:数组和链表
- 复合结构:散列表, 栈, 队列,树, 图等
数据结构的操作(算法):遍历加访问
- 线性: for/while 为代表
- 非线性:递归为代表
数据结构和算法:
- 数据结构是工具,算法是选择合适的工具解决问题的方法(使用工具的方法)
- 我们设计算法,发挥数据结构的特性,去解决实际问题
- 算法利用数据结构:显式利用( 单调栈直接利用了栈结构先进后出的特性), 隐式利用(动态规划就是隐式利用树这种结构)
对于初学者:学会从框架上看问题,而不纠结于细节的实现
Golang 安装第三方包:https://www.jianshu.com/p/97738b026521
本周阅读
第三周:1, 2, 3, 4, 7
最详细的IDEA中使用Debug教程: https://mp.weixin.qq.com/s/kWepBAGy5Hb15GfrsEiSHw
查看变量: 通过点击加号,查看已经存在的变量
Evaluate Expression 计算表达式
可以查看某个变量的值
也可以用于计算某个表达式的结果
可以计算方法返回的结果(不过golang中尝试了,却无法计算)
断点设置条件:即在断点位置,它的条件成立时才会暂停,否则就跳过
条件可以是一个变量的结果,或者是一个判断语句(eg: a == b)
设置方法:在断点上右击
查看所有断点:View Breakpoints
多线程调试:线程级别的调试
必须先开启默认线程
数据库的设计(E-R图,数据库模型图,三大范式): https://blog.csdn.net/Firewall5788/article/details/78112516
Part 36: Writing Files: https://golangbot.com/write-files/
微信大佬总结的算法学习经验: https://mp.weixin.qq.com/s/fECqsr3T4WKNcx7s-2ozuA
-
数据库ER图基础概念整理:https://zhuanlan.zhihu.com/p/29029129
第四周(动态规划周):1, 2, 3, 5, 6, 7
什么是策略模式?https://mp.weixin.qq.com/s/50HE4CzENZPniFWZjMEFtw
浅谈什么是动态规划以及相关的「股票」算法题:https://mp.weixin.qq.com/s/p91e-EuSuVK3bfOc7uJplg
Dynamic Programming--从菜鸟到老鸟: https://blog.csdn.net/u013309870/article/details/75193592
Go sort包使用与源码剖析: https://mp.weixin.qq.com/s/EkQm4RkZpl3dJpquBqHveg
Git 基础 - 打标签: https://git-scm.com/book/zh/v1/Git-%E5%9F%BA%E7%A1%80-%E6%89%93%E6%A0%87%E7%AD%BE
-
Go 1.9 新特性 Type Alias详解: https://www.flysnow.org/2017/08/26/go-1-9-type-alias.html
Part 12: Variadic Functions: https://golangbot.com/variadic-functions/
如何提升电脑性能(win)?https://mp.weixin.qq.com/s/LFxfZXonQfH5JXvxI7blww
开启高性能模式
学习数据结构的框架思维: https://mp.weixin.qq.com/s/KVRAPMnVLoyy6p0n3SbMJA
Part 28: Polymorphism - OOP in Go: https://golangbot.com/polymorphism/
数据结构与算法之递归系列:https://mp.weixin.qq.com/s/2gL7s8T6vjYQwwz_4UDy4g
有疑问加站长微信联系(非本文作者)