Frequency Queries

Sort by

recency

|

846 Discussions

|

  • + 1 comment

    what is wrong in my code:

    def freqQuery(queries):
        num = {}
        list1 = []
        for i in range(0,q):
            if(queries[i][0] == 1):
                if queries[i][1] in num:
                    num[queries[i][1]] = num[queries[i][1]] + 1
                else:
                    num[queries[i][1]] = 1
                
            elif(queries[i][0] == 2):
                if queries[i][1] in num:
                     num[queries[i][1]] = num[queries[i][1]] - 1
                else:
                    None            
            else :
                
                if queries[i][1] in num.values():
                    list1.append(1)
                else:
                    list1.append(0)
           
        return list1
                
    
  • + 0 comments

    My solution, in Java 8, which passes all test cases. The code is fairly simple & self-explanatory.

       // Complete the freqQuery function below.
        static List<Integer> freqQuery(List<List<Integer>> queries) {
    
            List<Integer> q3Results = new ArrayList<>();
            Map<Integer,Integer> intElemFreqMap = new LinkedHashMap<>();
    
            for (int qIdx = 0 ; qIdx < queries.size() ; qIdx++) {
                assert(queries.get(qIdx).size() == 2);
    
                int opType = queries.get(qIdx).get(0);
                int opVal = queries.get(qIdx).get(1);
                
                // System.err.println("opType=>" + opType + "<");
                // System.err.println("opVal=>" + opVal + "<");
    
                switch(opType) {
                    case 1:
                        intElemFreqMap.put(opVal, intElemFreqMap.getOrDefault(opVal, 0) + 1);
                        break;
                    case 2:
                        if (intElemFreqMap.containsKey(opVal) && intElemFreqMap.get(opVal) >= 1) {
                            intElemFreqMap.put(opVal, intElemFreqMap.get(opVal) - 1);
                        }
                        break;
                    case 3:
                        if (intElemFreqMap.containsValue(opVal)) {
                            q3Results.add(1);
                        } else {
                            q3Results.add(0);
                        }
                        break;
                    default:
                        System.err.println("Unknown OpType=>" + opType + "<");
                }
            }
            
            return q3Results;
        }
    
  • + 0 comments
    def freqQuery(queries):
        ans = []
        fMap = defaultdict(int)
        cMap = defaultdict(int)
        for op, num in queries:
            if op == 1:
                count = fMap[num] 
                fMap[num] += 1
                cMap[count] -= 1
                cMap[count+1] += 1
            elif op == 2:
                count = fMap[num] 
                if count > 0:
                    fMap[num] -= 1
                    cMap[count] -= 1
                    cMap[count-1] += 1
            else:
                ans.append(int(cMap[num] > 0))
        return ans    
    
  • + 1 comment

    What's wrong here, which corner case may I be missing? (suceeds with some of them)

    def freqQuery(queries):
        '''
        Function to conduct the operation as defined in the query list upon an array
    
        Inputs:
        queries         - [List(tuples)] List containing tuples with (actionType, value)
    
        Returns:
        None
        '''
        myArray = []
        outputArray = []
        
        for query in queries:
            queryValue = query[1]
            
            # debug
            print(f"myArray: {myArray}")
            print(f"query type: {query[0]}, query value: {queryValue}")
            
            # Check type of query and perform mentioned action
            match query[0]:
                case 1:
                    # Append to list
                    myArray.append(queryValue)
                case 2:
                    # Convert to set and check if the element exists
                    mySet = set(myArray)
                    if mySet.intersection([queryValue]):
                        myArray.remove(queryValue)
                case 3:
                    # Create a dictinoary of frequencies
                    myDict = dict(())
                    for element in myArray:
                        count = 0
                        if myDict.get(element) == None:
                            myDict.update({element: count+1})
                        else:
                            myDict.update({element: myDict.get(element)+ 1})
    
                    # Convert the dict to list for easy iteration
                    frequencies = list(myDict.items())
                    
                    # Check for matching or NO frequencies
                    if not frequencies:
                        outputArray.append(0)
                    else:
                        for index, frequency in enumerate(frequencies):
                            if frequency[1] == queryValue:
                                outputArray.append(1)
                                break
                            else:
                                outputArray.append(0)
                                break
                                 
        return outputArray
    
  • + 0 comments

    c#

            public static List<int> freqQuery(List<List<int>> queries)
            {
                Dictionary<long, int> res = new Dictionary<long, int>();
                List<int> ret = new List<int>();
                foreach (List<int> query in queries)
                {
                    switch(query[0])
                    {
                        case 1:
                            if (!res.ContainsKey(query[1]))
                            {
                                res.Add(query[1], 1);
                            } else
                            {
                                res[query[1]]++;
                            }
    
                            break;
                        case 2:
                            if (res.ContainsKey(query[1]))
                            {
                                if (res[query[1]] == 1)
                                {
                                    res.Remove(query[1]);
                                }
                                else
                                {
                                    res[query[1]]--;
                                }
                            }
                            break;
                        case 3:
                            int y = 0;
                            if (res.Values.Contains(query[1])) { y = 1; }
                            ret.Add(y);
                            break;
                    }
                }
    
                return ret;
    
            }