Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public:
- void calc_f (vector <int> & res , vector <string> &words)
- {
- vector <int> freq (26);
- int min_c = INT_MAX;
- for (int i = 0 ; i < words.size(); i++)
- {
- int min_c = INT_MAX;
- fill(freq.begin(), freq.end(), 0);
- string cur_w = words[i];
- for (int j = 0 ; j < cur_w.size(); j++)
- {
- int c = words[i][j] - 'a';
- freq[c]++;
- min_c = min (min_c, c);
- }
- res.push_back (freq[min_c]);
- }
- }
- int my_upper_bound (vector <int> &arr , int val)
- {
- int l = 0 , r = arr.size() - 1;
- int ans = 0;
- while (l <= r)
- {
- int m = l + (r - l)/2;
- if (arr[m] <= val)
- {
- l = m + 1;
- ans = l;
- }
- else
- {
- r = m - 1;
- }
- }
- return ans;
- }
- vector<int> numSmallerByFrequency(vector<string>& queries, vector<string>& words) {
- vector <int> f_w ;
- vector <int> f_q ;
- vector <int> res;
- calc_f (f_w, words);
- calc_f (f_q, queries);
- sort(f_w.begin() , f_w.end());
- int up;
- for (int i = 0 ; i < f_q.size(); i++ )
- {
- up = my_upper_bound(f_w, f_q[i]);
- int p = f_w.size() - up;
- res.push_back ( p );
- }
- return res;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement