ARST打卡第161周[161/521]

Algorithm

lc478_圆内随机生成点

感觉这个题目可以使用随机一个半径内的值作为离圆心距离的随机值,然后random(0, 360)作为圆弧角度

判断圆弧角的四个象限,然后再通过r * sinr * cos函数计算出坐标点

感觉又要用到很多标准库,暂时不熟go的标准库,还是先看一下题解

看题解发现需要生成r的话,需要开根号…

累积分布函数 CDF 有点忘了,但是重点不是这里的数学公式,所以pass掉数学部分…

链接:https://leetcode.cn/problems/generate-random-point-in-a-circle/solution/zai-yuan-nei-sui-ji-sheng-cheng-dian-by-qp342/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 解法一
type Solution struct {
radius, xCenter, yCenter float64
}

func Constructor(radius, xCenter, yCenter float64) Solution {
return Solution{radius, xCenter, yCenter}
}

func (s *Solution) RandPoint() []float64 {
r := math.Sqrt(rand.Float64())
sin, cos := math.Sincos(rand.Float64() * 2 * math.Pi)
return []float64{s.xCenter + r*cos*s.radius, s.yCenter + r*sin*s.radius}
}

还有一种在正方形内的拒绝采样的解法,思路是需要拒绝采样,这样可能需要生成多次,但是能保证随机

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
type Solution struct {
radius, xCenter, yCenter float64
}

func Constructor(radius, xCenter, yCenter float64) Solution {
return Solution{radius, xCenter, yCenter}
}

func (s *Solution) RandPoint() []float64 {
for {
x := rand.Float64()*2 - 1
y := rand.Float64()*2 - 1 // [-1,1) 的随机数
if x*x+y*y < 1 {
return []float64{s.xCenter + x*s.radius, s.yCenter + y*s.radius}
}
}
}

Review

【TED演讲】为什么技术不会产生爱情?

技术从始至终都是工具,在各个领域都是如此,从原始人类的使用石头,到后来使用机器,再到后来的使用自动化机器

技术始终是工具,而本身的人类的基因才是主宰,所以爱情还是由基因控制的各种生理激素决定的

Tips

Github 美化设置个人主页

Share

找golang技术栈下的redis的学习资料,找了比较久还是没有找到合适的,所以还是通过菜鸟教程学习redis

然后再直接用redis调用的go-pkg包得了