اعلی K بار بار الفاظ


مشکل سطح درمیانہ
اکثر پوچھا جاتا ہے اکٹھا کرنا فورکائٹس انفوسس
ہیکنگ ڈھیر ٹری

اکثر اوقات کے الفاظ کی پریشانی میں ، ہم نے الفاظ کی ایک فہرست اور ایک انٹیجر k دیا ہے۔ فہرست میں سب سے زیادہ استعمال ہونے والے ڈور پرنٹ کریں۔

اعلی K بار بار الفاظ

مثال کے طور پر

ان پٹ:

فہرست = {"کوڈ" ، "آسمان" ، "قلم" ، "آسمان" ، "آسمان" ، "نیلے" ، "کوڈ"}

k = 2

آؤٹ پٹ: 

آسمان

کوڈ

ان پٹ:

فہرست = {"ہاں" ، "نہیں" ، "ہاں" ، "ہاں"}

k = 1

آؤٹ پٹ: 

جی ہاں

اعلی K بار بار الفاظ کے لئے وضاحت

دی گئی فہرست = {"سی پی پی" ، "جاوا" ، "جاوا" ، "سی پی پی" ، "ازگر" ، "جاوا" ، "سی پی پی" ، "کوٹلن" ، "کوٹلن" ، "جاوا" k اور کے = 3 جانے دیں

ہر لفظ کی موجودگی کی کل تعداد -

  • سی پی پی دی گئی فہرست میں 3 بار واقع ہوئی۔
  • جاوا دی گئی فہرست میں 4 بار ہوا۔
  • دیئے گئے لسٹ میں ازگر 1 بار واقع ہوا۔
  • کوٹلن دیئے گئے فہرست میں 2 بار واقع ہوئی۔

ہر لفظ کے پائے جانے کی تعداد کا کم ہونا۔

جاوا ، سی پی پی ، کوٹلن ، ازگر

لہذا ، دی گئی فہرست میں اوپری کے (یعنی 3) اکثر استعمال ہونے والے الفاظ ہیں۔

  1. جاوا
  2. سی پی پی
  3. کوٹلن

اعلی K بار بار الفاظ کے ل Al الگورتھم

  1. الفاظ کی ایک فہرست اور ایک انٹیجر k شروع کریں۔
  2. ایک نقشہ اور ترجیحات کا آغاز کریں قطار.
  3. فہرست اور اضافے کا نقشہ [list [i]]] کو عبور کریں۔
  4. نقشہ کو عبور کریں اور دیکھیں کہ ترجیحی قطار کا سائز قطار میں موجودہ عنصر کو دھکیلنے سے کم ہے۔
  5. بصورت دیگر اگر قطار میں ایک اولین عنصر موجودہ عنصر سے کم ہے تو اوپری عنصر کو ہٹاتا ہے اور موجودہ عنصر کو قطار میں داخل کرتا ہے۔
  6. بصورت دیگر اگر قطار میں اوپری عنصر موجودہ عنصر کے برابر ہو اور موجودہ عنصر کی کلید سے اوپر عنصر کی کلید زیادہ ہو تو اوپری عنصر کو ہٹائیں اور موجودہ عنصر کو قطار میں داخل کریں۔
  7. خالی فہرست بنائیں۔
  8. قطار عبور کریں اور اس میں ٹاپ عنصر کو عارضی متغیر میں اسٹور کریں ، ٹاپ عنصر کو حذف کریں اور اس کی کلید کو نئی فہرست میں اسٹور کریں۔
  9. نئی فہرست کو الٹ اور واپس کریں۔

سی ++ پروگرام ، اوپر کے اکثر الفاظ تلاش کرنے کے ل.

#include <bits/stdc++.h>
using namespace std;

void frequent(vector<auto> v){
   for(int i = 0; i<v.size(); i++){
      cout<<v[i]<< endl;
   }
}

struct Comparator{
    bool operator()(pair <string ,int> a, pair <string, int> b){
        if(a.second != b.second) 
            return !(a.second < b.second);
        return !(a.first > b.first);
    }
};

class Solution{
    
    public:
        static bool cmp(pair <string, int> a, pair <string, int> b){
            if(a.second != b.second) 
                return a.second > b.second;
            return a.first < b.first;
        }
        
        vector<string> topFrequent(vector<string>& words, int k){
            map<string, int> m;
            
            priority_queue < pair <string, int>, vector < pair <string, int> >, Comparator > v;
            
            for(int i = 0; i < words.size(); i++){
                m[words[i]]++;
            }
            
            map<string, int> :: iterator i = m.begin();
            
            while(i != m.end()){
                if(v.size() < k){
                    v.push(*i);
                }
                else if(v.top().second < i->second){
                    v.pop();
                    v.push(*i);
                }
                else if(v.top().second == i->second && v.top().first > i->first){
                    v.pop();
                    v.push(*i);
                }
                i++;
            }
            
            vector <string> res;
            
            while(!v.empty()){
                pair <string, int> temp = v.top();
                v.pop();
                res.push_back(temp.first);
            }
            
            reverse(res.begin(), res.end());
            return res;
        }
};

int main(){
    
   Solution s;
   
   vector<string> v = {"code", "sky", "pen", "sky", "sky", "blue", "code"};
   int k = 2;
   frequent(s.topFrequent(v, k));
   
   return 0;
   
}
sky
code

جاوا پروگرام اعلی K بار بار الفاظ تلاش کرنے کے لئے

import java.util.*;

class text{
    public List<String> topKFrequentAlternate(final String[] words, int k) {
    	final Map<String, Integer> freq = new HashMap<>();
    	
    	final Queue<WordFreq> queue = new PriorityQueue<>((w1, w2) -> {
    		if (w1.getFreq() != w2.getFreq()) {
    			return w1.getFreq() - w2.getFreq();
    		}
    		return w2.getWord().compareTo(w1.getWord());
    	});
    	
    	final List<String> result = new ArrayList<>();
    
    	for (final String word : words) {
    		if (freq.containsKey(word)) {
    			final int count = freq.get(word);
    			freq.put(word, count + 1);
    		} else {
    			freq.put(word, 1);
    		}
    	}
    
    	for (final Map.Entry<String, Integer> entry : freq.entrySet()) {
    		queue.offer(new WordFreq(entry.getKey(), entry.getValue()));
    
    		if (queue.size() > k) {
    			queue.poll();
    		}
    	}
    
    	while (k-- > 0) {
    		result.add(queue.poll().getWord());
    	}
    
    	Collections.reverse(result);
    	return result;
    }
}
class WordFreq {
  private final String word;
  private final int freq;

  WordFreq(final String word, final int freq) {
    this.word = word;
    this.freq = freq;
  }

  String getWord() {
    return this.word;
  }

  int getFreq() {
    return this.freq;
  }

  @Override
  public String toString() {
    return Objects.toString(word) + "->" + Objects.toString(freq);
  }
  
  public static void main (String[] args){
      text t = new text();
      String[] words = {"code", "sky", "pen", "sky", "sky", "blue", "code"};
      int k = 2;
      List<String> res = new ArrayList<String>();
      res = t.topKFrequentAlternate(words,k);
        ListIterator<String> lItr = res.listIterator();
    while (lItr.hasNext()){
      System.out.println(lItr.next());
    }
  }
}
sky
code

حوالہ جات