Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions ParkFeng/random_pick_with_weight/Learn1.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@

class Solution {

int[] arr;
int maxOfArr;
Random random = new Random();
public Solution(int[] w) {
arr = new int[w.length];
arr[0] = w[0];
for (int i = 1; i <arr.length; i++) {
arr[i] = arr[i-1]+w[i];
}
maxOfArr = arr[arr.length-1];
}

public int pickIndex() {
int rand = random.nextInt(maxOfArr)+1;
int index = findIndex(arr, rand);
return index;
}

private int findIndex(int[] nums, int m) {
int start = 0;
int end = nums.length-1;
while (start+1 < end) {
int mid = (start+end)/2;
if (nums[mid] == m) {
return mid;
} else if (nums[mid] < m) {
start = mid+1;
} else {
end = mid-1;
}
}
if (m > nums[end]) {
return end+1;
} else if (m > nums[start]) {
return start+1;
} else {
return start;
}
}
}
41 changes: 41 additions & 0 deletions ParkFeng/random_pick_with_weight/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
题目:

给定一个正整数数组 w ,其中 w[i] 代表位置 i 的权重,请写一个函数 pickIndex ,它可以随机地获取位置 i,
选取位置 i 的概率与 w[i] 成正比。

说明:

1 <= w.length <= 10000
1 <= w[i] <= 10^5
pickIndex 将被调用不超过 10000 次
示例1:

输入:
["Solution","pickIndex"]
[[[1]],[]]
输出: [null,0]
示例2:

输入:
["Solution","pickIndex","pickIndex","pickIndex","pickIndex","pickIndex"]
[[[1,3]],[],[],[],[],[]]
输出: [null,0,1,1,1,0]
输入语法说明:

输入是两个列表:调用成员函数名和调用的参数。Solution 的构造函数有一个参数,即数组 w。
pickIndex 没有参数。输入参数是一个列表,即使参数为空,也会输入一个 [] 空列表。


题目分析:

1、该题针对:正整数数组---权重数组

2、权重随机理解:
eg: int[] arr = {3,4}--->向上抛一个硬币(假设硬币落地一定是平躺)7次,出现正面反面的次数(权重)分别为3,4,那么就可以说这个实验中正面出现概率是
3/7,反面出现概率是4/7,回到已知的这个数组上,3+4=7,权重随机我们可以理解为一个箱子中有七个分别标有1~7数字的乒乓球,我们随机从
箱子中每次拿一个乒乓球,那么拿到标有1,2,3的乒乓球我们就认为对应的是数组中的3,拿到4,5,6,7就对应的是4

3、获取位置序号:利用二分法去查找



4 changes: 3 additions & 1 deletion ParkFeng/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,6 @@



1.对角线遍历分析
1.对角线遍历分析

2.按权重随机选择