Frequency Queries

  • + 0 comments

    Nice solution! I used a similar approach, only more messy. I kept a separate array for values and updated that arary based on a query.

    Passed all tests though.

    function freqQuery(queries) {
    	const result = [];
    	const dict = {};
    	const values = [];
    	queries.forEach((queryArr) => {
    		if (queryArr[0] === 1) {
    			const index = values.indexOf(dict[queryArr[1]]);
    			if (index > -1) values.splice(index, 1);
    			dict[queryArr[1]] = (dict[queryArr[1]] || 0) + 1;
    			values.push(dict[queryArr[1]]);
    		} else if (queryArr[0] === 2) {
    			if (dict[queryArr[1]]) {
    				const index = values.indexOf(dict[queryArr[1]]);
    				dict[queryArr[1]] > 1 ? --dict[queryArr[1]] : delete dict[queryArr[1]];
    				if (dict[queryArr[1]]) {
    					values.splice(index, 1, dict[queryArr[1]]);
    				} else {
    					values.splice(index, 1);
    				}
    			}
    		} else if (queryArr[0] === 3) {
    			if (values.includes(queryArr[1])) {
    				result.push(1);
    			} else {
    				result.push(0);
    			}
    		}
    	});
    	return result;
    }