Posts

Showing posts with the label hash

384. Longest Substring Without Repeating Characters

class Solution { public : /** * @param s: a string * @return: an integer */ int lengthOfLongestSubstring ( string &s) { // write your code here const int size = s.size(); if (size <= 1 ){ return size; } int left = -1 ; int res = 1 ; unordered_map < int , int > mp; for ( int i = 0 ; i < size; i++){ if (mp.count(s[i])){ left = max(left, mp[s[i]]); } res = max(res, i - left); mp[s[i]] = i; } return res; } };

124. Longest Consecutive Sequence

class Solution { public : /** * @param num: A list of integers * @return: An integer */ int longestConsecutive ( vector < int > &num) { // write your code here unordered_set < int > set ; const int size = num.size(); if (size == 0 ){ return 0 ; } set .insert(num.begin(), num.end()); int res = 1 ; for ( int i = 0 ; i < size; i++){ if ( set .count(num[i])){ int left = num[i] - 1 ; while ( set .count(left)){ set .erase(left); left--; } int right = num[i] + 1 ; while ( set .count(right)){ set .erase(right); right++; } res = max(res, right - left - 1 ); } } return res; } };

772. Group Anagrams

Code ( Language :C++) Edit class Solution { public : /** * @param strs: the given array of strings * @return: The anagrams which have been divided into groups */ vector < vector < string >> groupAnagrams( vector < string > &strs) { // write your code here vector < vector < string >> res; const int size = strs.size(); if (size == 0 ){ return res; } unordered_map < string , vector < string >> mp; for ( int i = 0 ; i < size; i++){ mp[sort(strs[i])].push_back(strs[i]); } for ( auto i : mp){ res.push_back(i.second); } return res; } string sort ( string &str) { vector < int > arr( 26 , 0 ); for ( int i = 0 ; i < str.size(); i++){ arr[str[i] - 'a' ]++; } string res = "" ; for...

911. Maximum Size Subarray Sum Equals k

int maxSubArrayLen ( vector < int > &nums, int k) { // Write your code here const int size = nums.size(); unordered_map < int , int > mp; int sum = 0 ; int maxLen = 0 ; for ( int i = 0 ; i < size; i++){ sum += nums[i]; if (sum == k){ //key1 单独处理sum 等于k的情况 maxLen = max(maxLen, i + 1 ); } if (mp.find(sum - k) != mp.end()){ maxLen = max(maxLen, i - mp[sum - k]); } if (mp.find(sum) == mp.end()){ //key2 保持mp[sum] 的index是小值。只在sum不在mp里时,才更新 mp[sum] = i; } } return maxLen; }

648. Unique Word Abbreviation

class ValidWordAbbr { public : /* * @param dictionary: a list of words */ //開始的時候沒有理解題意 unordered_map < string , int > m1; unordered_map < string , int > m2; ValidWordAbbr( vector < string > dictionary) { // do intialization if necessary for ( int i = 0 ; i < dictionary.size(); i++){ string word = dictionary[i]; m1[word]++; string temp; if (word.size() > 2 ){ /* string temp(2, '0'); temp[0] = word[0]; temp[1] = word[word.size() - 1]; temp += to_string(word.size()); */ temp = word.front() + to_string(word.size() - 2 ) + word.back(); //temp = "" + word[0] + to_string(word.size() - 2) + word[word.size() - 1]; 不行 为什么? } else { temp = word; } m2[te...

1402. Recommend Friends

Give  n  personal friends list, tell you user, find the person that user is most likely to know. (He and the user have the most common friends and he is not a friend of user) n <= 500 . The relationship between friends is mutual. (if B appears on a's buddy list, a will appear on B's friends list). Each person's friend relationship does not exceed  m ,  m <= 3000 . If there are two people who share the same number of friends as user, the  smaller number  is considered the most likely person to know. If user and all strangers have no common friends, return  -1 . Have you met this question in a real interview?    Yes Problem Correction Example Given list =  [[1,2,3],[0,4],[0,4],[0,4],[1,2,3]] , user =  0 , return  4 . Explanation: 0 and 4 are not friends, and they have 3 common friends. So 4 is the 0 most likely to know. Given list =  [[1,2,3,5],[0,4,5],[0,4,5],[0,5],[1,2],[0,1,2...

838. Subarray Sum Equals K

int subarraySumEqualsK ( vector < int > &nums, int k) { // write your code here int n = nums.size(); if (n == 0 ){ return 0 ; } vector < int > prefixSum(n + 1 , 0 ); int sum = 0 ; for ( int i = 0 ; i < n; i++){ sum += nums[i]; prefixSum[i + 1 ] = sum; } int res = 0 ; for ( int i = 0 ; i < n + 1 ; i++){ for ( int j = i + 1 ; j < n + 1 ; j++){ if (prefixSum[j] - prefixSum[i] == k){ res++; } } } return res; } 超时 过了,但脑子锈掉了,写出这么冗长的代码 int subarraySumEqualsK ( vector < int > &nums, int k) { // write your code here int n = nums.size(); if (n == 0 ){ return 0 ; } vector < int > prefixSum(n + 1 , 0 ); unordered_map < int , vector < int ...