Frequency Queries

  • + 1 comment

    Can you please check my code, It's timing out for testcase 9, 10, 11, 12, 13. I have chnaged boilerplate code. Thanks in advance.

    static List<Integer> freqQuery(int[][] queries) {
        List<Integer> res = new ArrayList<>();
        if(queries==null || queries.length==0){
            return null;
        }
        Map<Integer, Integer> elementFreeqMap = new HashMap<>();
        Map<Integer, Integer> freqCountMap = new HashMap<>();
        int currentFreq = 0;
        int currFreqElemCount = 0;
        for(int[] query:queries){
            int command = query[0];
            int param = query[1];
            if(command==1){
                currentFreq = elementFreeqMap.getOrDefault(param, 0);
                currFreqElemCount = freqCountMap.getOrDefault(currentFreq, 0);
                if(currFreqElemCount>0){
                    freqCountMap.put(currentFreq, currFreqElemCount-1);
                }
                currentFreq ++;
                elementFreeqMap.put(param,currentFreq);
                currFreqElemCount = freqCountMap.getOrDefault(currentFreq, 0);
                freqCountMap.put(currentFreq, currFreqElemCount+1);
            }else if(command==2){
                currentFreq = elementFreeqMap.getOrDefault(param, 0);
                if(currentFreq>0){
                    currFreqElemCount = freqCountMap.getOrDefault(currentFreq, 0);
                    if(currFreqElemCount>0){
                        freqCountMap.put(currentFreq, currFreqElemCount-1);
                    }
                    currentFreq--;
                    elementFreeqMap.put(param,currentFreq);
                    currFreqElemCount = freqCountMap.getOrDefault(currentFreq, 0);
                    freqCountMap.put(currentFreq, currFreqElemCount+1);
                }
            }else if(command==3){
                currFreqElemCount = freqCountMap.getOrDefault(param, 0);
                if(currFreqElemCount==0){
                    res.add(0);
                }else{
                    res.add(1);
                }
            }else{
                //error
            }
        }
        return res;
    }