本文主要是介绍18.哀家要长脑子了!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.242. 有效的字母异位词 - 力扣(LeetCode)
用一个flag数组,s出现的 加! t出现的 减! 这样s和t中每个字符出现的次数相同的话,就会加多少减多少,flag数组的元素值都会是0
class Solution {
public:bool isAnagram(string s, string t) {int flag[26] = {0};for(int i = 0; i < s.length(); i++){flag[s[i] - 'a']++;}for(int i = 0; i < t.size(); i++){flag[t[i] - 'a']--;}for(int i = 0; i < 26; i++){if(flag[i] != 0)return false;}return true;}
};
2.349. 两个数组的交集 - 力扣(LeetCode)
使用set
class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {unordered_set<int> res;unordered_set<int> s(nums1.begin(), nums1.end());for(int num: nums2){if(s.find(num) != s.end()){res.insert(num);} }return vector<int>(res.begin(), res.end());}
};
使用标记数组
class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {unordered_set<int> res;int flag[1005] = {0};for(int num: nums1){flag[num] = 1;}for(int num : nums2){if(flag[num] != 0){res.insert(num);}}return vector<int>(res.begin(), res.end());}
};
哎呀,其实我觉得这两个没有本质的区别,只是表现方式换了而已
使用标记数组的话,先遍历一边nums1数组,把num1数组中有的元素标记为1,再遍历一遍nums2数组,nums2数组的元素作为flag数组的下标,如果此时元素值不为0,说明该元素(下标)在nums1中出现,可不就是交集吗
使用set的话,先把nums1数组中不同的的元素放到set里面,再遍历一遍nums2。
// 如果在s中没有找到num就会返回set中最后一个元素(end迭代器)
s.find(num) != s.end()
如果不等于说明找到了,也是交集啦
一天不写题,别人不知道,自己知道啊
这篇关于18.哀家要长脑子了!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!