代码随想录day06

242.有效的字母异位词

刚学哈希表想着使用unordered_set来实现,结果无法通过,原因是对字母异位词理解有问题,字母异位词是通过重新排列不同单词或短语的字母而形成的单词或短语,并使用所有原字母一次。对字母出现的次数有要求,无法使用unordered_set

cpp 复制代码
bool isAnagram(string s, string t) {
        std::unordered_set<char> _slist;
        for(int i = 0; i < s.size(); i++){
            _slist.insert(s[i]);
        }
        std::unordered_set<char> _tlist;
        for(int j = 0; j < t.size(); j++){
            _tlist.insert(t[j]);
        }
        bool flag = _slist == _tlist;
        if(flag){
            return s.size() == t.size();
        }else{
            return flag;
        }
  }

正确方法 1:学习使用数组来做哈希表

cpp 复制代码
bool isAnagram(string s, string t) {
        int record[26] = {0};
        for(int i = 0; i < s.size(); i++){
            record[s[i] - 'a']++;
        }
        for(int j = 0; j < t.size(); j++){
            record[t[j] - 'a']--;
        }
        for(int k = 0; k < 26; k++){
            if(record[k] != 0){
                return false;
            }
        }
        return true;
    }

正确方法2: 利用multiset特性(值有序并且可以重复)

cpp 复制代码
bool isAnagram(string s, string t) {
        std::multiset<char> s_set;
        for(int i = 0; i < s.size(); i++){
            s_set.insert(s[i]);
        }
        std::multiset<char> t_set;
        for(int j = 0; j < t.size(); j++){
            t_set.insert(t[j]);
        }
        return s_set == t_set;
    }

349.两个数组的交集

cpp 复制代码
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        vector<int> result;
        std::unordered_set<int> nums1_set;
        for(int i = 0; i < nums1.size(); i++){
            nums1_set.insert(nums1[i]);
        }
        std::unordered_set<int> nums2_set;
        for(int j = 0; j < nums2.size(); j++){
            nums2_set.insert(nums2[j]);
        }
        for(const auto& elem : nums1_set){
            if(nums2_set.find(elem) != nums2_set.end()){
                result.push_back(elem);
            }
        }
        return result;
}

202.快乐数

练习如何进行单数之和计算,以及如何判断退出机制

复制代码
// 如果这个sum曾经出现过,说明已经陷入了无限循环了,立刻return false
cpp 复制代码
    int getSum(int n){
        int sum = 0;
        do{
            int yushu = (n % 10) * (n % 10);
            sum += yushu;
            n = n / 10;
        }while(n != 0);
        return sum;
    }
    bool isHappy(int n) {
        std::unordered_set<int> result;
        while(1){
            int sum = getSum(n);
            if(sum == 1){
                return true;
            }else{
                if(result.find(sum) != result.end()){
                    return false;
                }else{
                    result.insert(sum);
                }
            }
            n = sum;
        }
    }

1.两数之和

//a暴力解法

cpp 复制代码
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> result;
        for(int i = 0; i < nums.size() - 1; i++){
            for(int j = i+1; j < nums.size(); j++){
                if(nums[i]+nums[j] == target){
                    result.push_back(i);
                    result.push_back(j);
                    return result;
                }
            }
        }
        return result;
    }

//b学习使用map对象,主要了解何时使用哈希法

cpp 复制代码
    vector<int> twoSum(vector<int>& nums, int target) {
        std::unordered_map<int,int> nums_map;
        
        for(int i = 0; i < nums.size(); i++){
            if(nums_map.find(target - nums[i]) != nums_map.end()){
                return {nums_map.find(target-nums[i])->second, i};
            }else{
                nums_map.insert(pair<int,int>(nums[i], i));
            }
        }
        return {};
    }
相关推荐
Dovis(誓平步青云)2 分钟前
基于探索C++特殊容器类型:容器适配器+底层实现原理
开发语言·c++·queue·适配器·stack
Gyoku Mint35 分钟前
深度学习×第4卷:Pytorch实战——她第一次用张量去拟合你的轨迹
人工智能·pytorch·python·深度学习·神经网络·算法·聚类
葫三生2 小时前
如何评价《论三生原理》在科技界的地位?
人工智能·算法·机器学习·数学建模·量子计算
pipip.2 小时前
UDP————套接字socket
linux·网络·c++·网络协议·udp
拓端研究室4 小时前
视频讲解:门槛效应模型Threshold Effect分析数字金融指数与消费结构数据
前端·算法
随缘而动,随遇而安6 小时前
第八十八篇 大数据中的递归算法:从俄罗斯套娃到分布式计算的奇妙之旅
大数据·数据结构·算法
孞㐑¥6 小时前
Linux之Socket 编程 UDP
linux·服务器·c++·经验分享·笔记·网络协议·udp
IT古董6 小时前
【第二章:机器学习与神经网络概述】03.类算法理论与实践-(3)决策树分类器
神经网络·算法·机器学习
水木兰亭9 小时前
数据结构之——树及树的存储
数据结构·c++·学习·算法
Jess0710 小时前
插入排序的简单介绍
数据结构·算法·排序算法