首页 > 编程语言 >代码随想录算法训练营第一天 | 有效的字母异位词、两个数组的交集,快乐数,两数之和

代码随想录算法训练营第一天 | 有效的字母异位词、两个数组的交集,快乐数,两数之和

时间:2023-01-16 16:01:29浏览次数:63  
标签:ma int 训练营 随想录 ++ vector result return 两数

day6

242.有效的字母异位词

class Solution {
public:
    bool isAnagram(string s, string t) {
        std::unordered_map<char,int> ma;
        for (int i = 0; i < s.size(); ++i) {
            if (ma.find(s[i]) == ma.end()) ma[s[i]] = 1;
            else ma[s[i]]++;
        }
        for (int j = 0; j < t.size(); ++j) {
            if (ma.find(t[j]) == ma.end()) return false;
            else {
                ma[t[j]]--;
                if (ma[t[j] == 0]) return false;
            }
        }
        for (auto const& [key,value]:ma) {
            if (value != 0) return false;
        }
        return true;
    }
};

​ 数组就行,有点太暴力了

class Solution {
public:
    bool isAnagram(string s, string t) {
        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;
    }
};

349. 两个数组的交集

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        vector<int> result;
        std::unordered_map<int,int> ma;
        for (int i = 0; i < nums1.size();i++) {
            if (ma.find(nums1[i]) == ma.end()) ma[nums1[i]] = 1;
        }
        for (int j = 0;j < nums2.size(); ++j) {
            if (ma.find(nums2[j]) != ma.end() && ma[nums2[j]] == 1) {
                 result.push_back(nums2[j]);
                ma[nums2[j]]--;
            }
        }
        return result;
    }
};

第202题. 快乐数

​ 注意循环的意义,出现的再出现就是循环了

class Solution {
public:
    bool isHappy(int n) {
        set<int> sums;
        int result = n;
        while(result != 1) {
            result = reValue(result);
            if (sums.find(result) == sums.end()) sums.insert(result);
            else return false;
        }
        return true;
    }
    int reValue(int n) {
        int sum = 0;
        int num = 0;
        while(n != 0) {
            num = n % 10;
            n /= 10;
            sum += num * num;
        }
        return sum;
    }
};

1. 两数之和

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> result;
        std::unordered_map<int,int> ma;
        for (int i = 0; i < nums.size(); ++i) {
            if (ma.find(target-nums[i]) != ma.end()) {
                result.push_back(ma[target - nums[i]]);
                result.push_back(i);
                return result;
            } 
            else {
                ma[nums[i]] = i;
            }
        }
        return result;
    }
};

标签:ma,int,训练营,随想录,++,vector,result,return,两数
From: https://www.cnblogs.com/masene/p/17055602.html

相关文章