classMagicDictionary{public:
vector<string> dictionary;MagicDictionary(){
dictionary.clear();}voidbuildDict(vector<string> dictionary){this->dictionary = dictionary;}boolsearch(string searchWord){int n = searchWord.size();for(string word : dictionary){if(word.size()!= n){continue;}int count =1;bool flag =true;for(int i =0; i < n; i++){if(word[i]!= searchWord[i]) count--;if(count <0){
flag =false;break;}}if(flag &&!count)returntrue;}returnfalse;}};/**
* Your MagicDictionary object will be instantiated and called as such:
* MagicDictionary* obj = new MagicDictionary();
* obj->buildDict(dictionary);
* bool param_2 = obj->search(searchWord);
*/
875. 爱吃香蕉的珂珂(138)
代码实现(首刷自解)
classSolution{public:boolcheck(vector<int> piles,int m,int h){int times =0;auto it =lower_bound(piles.begin(), piles.end(), m);
times += it - piles.begin();while(it != piles.end()){int tmp =*it;
times += tmp / m +(tmp % m !=0);++it;}return times <= h;}intminEatingSpeed(vector<int>& piles,int h){sort(piles.begin(), piles.end());int l =1, r = piles.back();while(l < r){int m = l + r >>1;if(check(piles, m, h)) r = m;else l = m +1;}return l;}};
1552. 两球之间的磁力(139)
代码实现(部分看题解)
classSolution{public:intcheck(vector<int>& position,int m){int pre = position[0];int n = position.size();int count =1;for(int i =1; i < n; i++){if(position[i]- pre >= m){
count++;
pre = position[i];}}return count;}intmaxDistance(vector<int>& position,int m){sort(position.begin(), position.end());int ans;int l =1, r = position.back()- position[0];while(l <= r){int mid = l + r >>1;if(check(position, mid)>= m){
l = mid +1;
ans = mid;}else r = mid -1;}return ans;}};