Пример #1
0
        public int FourSumCount(int[] A, int[] B, int[] C, int[] D)
        {
            var dict = new ItemCountDictionary <int>();

            for (var i = 0; i < A.Length; ++i)
            {
                for (var j = 0; j < B.Length; ++j)
                {
                    dict[A[i] + B[j]]++;
                }
            }

            var count = 0;

            for (var k = 0; k < C.Length; ++k)
            {
                for (var l = 0; l < D.Length; ++l)
                {
                    var sum = C[k] + D[l];
                    if (dict[0 - sum] > 0)
                    {
                        count += dict[0 - sum];
                    }
                }
            }

            return(count);
        }
Пример #2
0
        public int[] TopKFrequent(int[] nums, int k)
        {
            var dict = new ItemCountDictionary <int>();

            foreach (var num in nums)
            {
                dict[num]++;
            }

            var queue = new PriorityQueue <KeyValuePair <int, int> >(200, new ItemFrequencyComparer());

            foreach (var kvPair in dict)
            {
                queue.Push(kvPair);
                if (queue.Count > k)
                {
                    queue.Pop();
                }
            }

            var result = new int[k];
            var index  = 0;

            while (queue.Count > 0)
            {
                var node = queue.Pop();
                result[index++] = node.Key;
            }

            return(result);
        }
Пример #3
0
        public bool CanConstruct(string ransomNote, string magazine)
        {
            var magazineDict = new ItemCountDictionary <Char>();

            for (var i = 0; i < magazine.Length; ++i)
            {
                var c = magazine[i];
                magazineDict[c]++;
            }

            var ransomNoteDict = new ItemCountDictionary <Char>();

            for (var i = 0; i < ransomNote.Length; ++i)
            {
                var c = ransomNote[i];
                ransomNoteDict[c]++;
            }

            foreach (var entry in ransomNoteDict)
            {
                if (!magazineDict.ContainsKey(entry.Key) ||
                    ransomNoteDict[entry.Key] > magazineDict[entry.Key])
                {
                    return(false);
                }
            }

            return(true);
        }
Пример #4
0
 public LFUCache(int capacity)
 {
     _keyToValue = new Dictionary <int, int>();
     _keyToFreq  = new ItemCountDictionary <int>();
     _freqToKeys = new Dictionary <int, List <int> >();
     _capacity   = capacity;
     _minFreq    = 0;
 }