242 有效的字母異位詞
思路就是轉為ASCII碼,然后用一個數組記錄26位字母出現的次數
#include <string>
class Solution{
public:bool isAnagram(string s,string t){int record[26]={0};for (int i=0;i<s.size();i++){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) return false;}return true;}
};
349 兩個數組的交集
這部分學習到的知識就多了
1、std::unordered_set,這是一個C++容器,底層是哈希表,查詢復雜度為O(1),其次,他不允許有重復的值(也就是說,將vector nums的值放進去,會自動去重)
2、如何將vector的東西放進unordered_set中呢?
unordered_set<int> num_set(nums1.begin(),nums1.end());
同理,將unordered_set中的東西放進到vector中
vector<int> result(unordered_set.begin(),unordered_set.end())
3、如何對unordered_set中的元素進行查找呢?
使用nums_set.find(num) 如果找到了,那么就返回一個 指向該元素的迭代器,如果沒找到,就返回nums_set.end()這個特殊的迭代器。
#include <vector>
class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { //參數為nums1的引用,nums2的引用unordered_set<int> result_set; //自動去重 + 查找速度快(平均 O(1))unordered_set<int> nums_set(nums1.begin(),nums1.end());//構建一個新的unordered_set,把nums1放進nums_set中,使用的是迭代器的語法,從nums1的begin到nums1的endfor (int num:nums2){ //遍歷 nums2 中的每一個數字 num。if (nums_set.find(num)!=nums_set.end()){ //如果nums_set.find(num)返回一個指向該元素的迭代器;如果沒找到,那么就返回的是 nums_set.end(),這是一個“尾后迭代器”,表示“找不到”。result_set.insert(num);
// 如果 num 存在于 nums_set 中:
// 返回一個 指向該元素的迭代器。
// 如果 num 不存在于 nums_set 中:
// 返回一個特殊的迭代器 —— nums_set.end(),表示“查找失敗”或“無此元素”。}}return vector<int>(result_set.begin(),result_set.end()) //result_set.begin() 到 result_set.end() 形成一個范圍,傳給 vector 構造函數;}
};
202 快樂數
set.insert(num);
也就是將num加入到集合中
class Solution {
public:int getSum(int n){int result=0;while(n){result += (n%10)*(n%10);n = n/10;}return result;}bool isHappy(int n) {unordered_set<int> set;while(1){//不斷循環int sum = getSum(n);if (sum==1){return true;}if (set.find(sum)!= set.end()){return false;}else{set.insert(sum);//新函數,將sum加入到set中}n = sum;}}
};