
数学定理
Czy_whlg
不忘本心!
展开
-
Random Point in Non-overlapping Rectangles
class Solution {public: Solution(vector<vector<int>>& rects) { this->rects = rects; allArea = 0; for (auto rect : rects){ allArea += (re...原创 2020-02-16 12:20:28 · 211 阅读 · 0 评论 -
Generate Random Point in a Circle
class Solution {public: Solution(double radius, double x_center, double y_center) { this->radius = radius; this->x_center = x_center; this->y_center = y_cente...原创 2020-02-14 18:40:01 · 241 阅读 · 0 评论 -
Implement Rand10() Using Rand7()
1. 解析题目大意,利用提供的rand7(),实现一个rand10()的函数,使其能随机产生[1, 10]范围内的数字,即每个数字都是等概率出现的。2. 分析像类似的这种题,基本上都会涉及数学定理的。参考了@Grandyang的求解思路,写的很清晰~我们可以稍微写几个例子:①已知rand2(),实现rand4(),可以利用(rand2() - 1 )* 2 + ran...原创 2020-01-12 11:23:11 · 215 阅读 · 0 评论 -
Random Pick Index
1. 解析题目大意,返回在数组中指定元素的索引,若查找元素出现多次,要保证返回的每个索引的概率相等2. 分析这道题可以说按照正常的解法是很简单的,但存在一个问题,若所查找的元素在数组中出现无限多次,就不是很好处理啦。实际上,本题考查的是水塘采样,维持一个大小的水塘即可。建议去了解一下水塘采样,这样这题就很容易理解啦~~~class Solution {public: ...原创 2019-12-16 19:39:01 · 112 阅读 · 0 评论 -
Shuffle an Array
1. 解析题目大意,将牌打乱,保证每个元素被交换的概率是一样的。2. 分析大多数人想到的解法可能就是直接用rand() % n,然后和当前的元素进行交换,这种随机的交换并不能保证每一张牌都有机会被交换。实际上,这题考察的是Knuth-Durstenfeld Shuffle算法,即每次将最后一张牌和未洗过的随机一张牌进行交换即可,这样就可以保证每张牌都有可能被交换。class...原创 2019-12-20 20:32:35 · 122 阅读 · 0 评论 -
Linked List Random Node
1. 解析题目大意,随机返回链表中1个节点的值2. 分析我最初想到的解法就是,遍历整个链表,获取链表的长度length,然后根据生成随机数的库函数rand()获取一个[1, length]范围内的随机数,返回对应编号的链表节点。这种方法可以AC,但存在一个问题,当链表无限大,即我们无法获取链表的长度时,这种方法就行不通啦~~~/** * Definition for si...原创 2019-12-13 17:34:16 · 126 阅读 · 0 评论 -
Water and Jug Problem
1. 解析题目大意,给定两个容量分别为x和y的容器,判断这两个容器是否可以测量出需要的容量。这题的本质涉及到一个数学裴蜀定理,难啊~~只要涉及数学定理的都很难,虽然代码就几行2. 分析参考@Grandyang博主的思路,很到位。我这里重述一下,先将场景抽象成我们要求解的问题,相当于给定一个装满水的大容器(反正就是取不完),给你两个有容量的容器,看你能否利用这两个容器盛出我想要的容...原创 2019-12-05 17:12:34 · 192 阅读 · 0 评论 -
Find the Duplicate Number
1. 解析题目大意,在(n+1)个元素(数值的范围为1-n)组成的数组中,查找出重复出现的元素,要求时间复杂度小于O(n^2),空间复杂度为O(1).2. 分析如果不限制空间复杂度,还是很容易想到一种解法,利用hashtable记录出现过的元素,很容易找出重复的元素,或者直接对数组进行排序,也很方便检测出重复出现的元素;其实,本题最本质是考察鸽巢原理,即将10个苹果放在9个空抽屉...原创 2019-11-20 21:31:33 · 103 阅读 · 0 评论 -
Perfect Squares
1. 解析题目大意,将正整数拆分成多个正整数的平方,求解可以拆分的最小个数2. 分析我刚开始想到的是,用递归取求解,然而,时间超限,不过也很正常。本题所考察的核心是四平方和定理,即任意一个正整数最多可以拆分成4个正整数的平方,如果当前所拆分的正整数n为4的倍数,那么该正整数所分解结果的个数与n/4的结果一样,很容易证明,例如(a^2 + b^2 + c^2) = n,则 4n = ...原创 2019-11-20 20:41:48 · 286 阅读 · 0 评论