class Solution { public: bool isAnagram(string s, string t) { if(s.length() != t.length()) return false; map<char, int> map_s; map<char, int> map_t; for(int i=0; i<s.length(); i++) map_s[s[i]]++; for(int i=0; i<t.length(); i++) map_t[t[i]]++; //字符数相同,逐个比较 for(int i=0; i<t.length(); i++){ if(map_s[t[i]] != map_t[t[i]]) return false; } return true; /* int record[26] = {0}; for (int i = 0; i < s.size(); i++) { // 并不需要记住字符a的ASCII,只要求出一个相对数值就可以了 record[s[i] - 'a']++; } for (int i = 0; i < t.size(); i++) { record[t[i] - 'a']--; } for (int i = 0; i < 26; i++) { if (record[i] != 0) { // record数组如果有的元素不为零0,说明字符串s和t 一定是谁多了字符或者谁少了字符。 return false; } } // record数组所有元素都为零0,说明字符串s和t是字母异位词 return true; */ } };
class Solution { public: vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { unordered_set<int> result_set; // 存放结果,之所以用set是为了给结果集去重 unordered_set<int> nums_set(nums1.begin(), nums1.end()); for (int num : nums2) { // 发现nums2的元素 在nums_set里又出现过 if (nums_set.find(num) != nums_set.end()) { result_set.insert(num); } } return vector<int>(result_set.begin(), result_set.end()); } };
class Solution { public: map<int, int> map_square; map<int, int> map_exists; unordered_set<int> set_list; bool b_find = false; //map 方法 int split_map(int n){ if(n == 1){ b_find = true; return 0; } if(map_exists[n] == 1) return 0; map_exists[n] = 1; int result = 0; while(n>0){ int a = n % 10; result += map_square[a]; n = n / 10; } cout << result << endl; return result; } //set 方法 int split_set(int n){ if(n == 1){ b_find = true; return 0; } if(set_list.find(n) != set_list.end()) return 0; set_list.insert(n); int result = 0; while(n>0){ int a = n % 10; result += map_square[a]; n = n / 10; } cout << result << endl; return result; } bool isHappy(int n) { for(int i=0; i<=9; i++) map_square[i] = i*i; //int result = split_map(n); int result = split_set(n); while(result != 0){ result = split_set(result); } return b_find; } };
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { // int size = nums.size(); // for(int i=0; i<size; i++){ // for(int j=i+1; j<size; j++){ // if(nums[i] + nums[j] == target){ // return {i, j}; // } // } // } // return {}; //map 方法 map<int, int> map_result; for(int i=0; i<nums.size(); i++) map_result[nums[i]] = i;//map的key是值,value是下标 for(int i=0; i<nums.size(); i++){ if(map_result[target - nums[i]] && map_result[target - nums[i]] != i) //不能自己相加 return {i, map_result[target - nums[i]]}; } return {}; /* std::unordered_map <int,int> map; for(int i = 0; i < nums.size(); i++) { // 遍历当前元素,并在map中寻找是否有匹配的key auto iter = map.find(target - nums[i]); if(iter != map.end()) { return {iter->second, i}; } // 如果没找到匹配对,就把访问过的元素和下标加入到map中 map.insert(pair<int, int>(nums[i], i)); } return {}; */ } };
标签:map,set,return,nums,part01,day06,int,result,哈希 From: https://www.cnblogs.com/zqh2023/p/17629361.html