classSolution{public:vector<int>pre={0};intrange=0;Solution(vector<int>&w){for(autow_:w){range+=w_;pre.push_back(range);}}intpickIndex(){intrandnum=rand()%range;intidx=upper_bound(pre.begin(),pre.end(),randnum)-pre.begin();returnidx-1;}};/**
* Your Solution object will be instantiated and called as such:
* Solution* obj = new Solution(w);
* int param_1 = obj->pickIndex();
*/
classSolution{public:vector<int>pre={0};intrange=0;Solution(vector<int>&w){for(autow_:w){range+=w_;pre.push_back(range);}}intpickIndex(){intrandnum=rand()%range;// 最后一个小于等于randnum的下标i,返回i
intl=0,r=pre.size()-1;while(l<r){intmid=(l+r+1)>>1;if(pre[mid]<=randnum){l=mid;}else{r=mid-1;}}returnl;}};/**
* Your Solution object will be instantiated and called as such:
* Solution* obj = new Solution(w);
* int param_1 = obj->pickIndex();
*/