880. Random Pick with Weight
题目大意:交互题,每个索引对应一个权重,根据权重选择每个索引
解题思路:使用rand函数,将每个索引对应的权重扩展开来 ,对应到数轴上。可以二分查找随机数在哪个区间里,也可以直接暴力查找。需要注意随机出来的数字要+1,因为0不包括在区间内,否则权重就变化了。
int ans[100005];
int n;
class Solution {
public:
Solution(vector<int> w) {
n = w.size(); //cout<<n<<endl;
memset(ans,0,sizeof(ans));
ans[0]=w[0];
for(int i=1;i<n;i++)
{
ans[i] = ans[i-1] + w[i];
}
cout<<n<<" "<<ans[n-1]<<endl;
}
int pickIndex() {
srand((unsigned)time(0));
int tmp = rand() % ans[n-1];
cout<<tmp<<endl;
//cout<<tmp<<" "<<n<<" "<<ans[0]<<endl;
for(int i=0;i<n;i++)
{
if(tmp<=ans[i]) return i;
}
}
};