算法随想录算法营打卡第6天

16、有效的字母异位体

力扣原题

题目简介:

给定两个字符串 st ,编写一个函数来判断 t 是否是 s 的 字母异位词。

初见思路:

​ 这道题用的是哈希表来写,如果要判断两个词是不是字母异位词,应该就是判断一个词中的字母是不是全部都出现在另一个词中,一定不可以从顺序上思考,因为我又不知道两个词是不是字母异位词的规律。一定是这样的,我先存一个单词的所有字母到一个表里,然后再检查另一个单词。

算法思路:

class Solution {
public:
    bool isAnagram(string s, string t) {
        if(s.size() != t.size()){
            return false;
        }
       bool flag =true;
        unordered_map<char,int> wordList1;
        unordered_map<char,int> wordList2;
        for(auto &a : s){
            wordList1[a]++;
        }
        for(auto &b : t){
            wordList2[b]++;
        }

        for(auto &c : s){
            if(wordList1[c] != wordList2[c]){
                flag = flag && false;
            }
            else{
                flag = flag && true;
            }
        }


        return flag;
    }
};

​ 果然还是有问题,不能只是看有没有,还要看数量才行,所以还是得用map来写才行。

17、两个数组的交集

力扣原题

题目简介:

给定两个数组 nums1nums2 ,返回 它们的 交集。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序

初见思路:

​ 我看了一下,这道题就是交集而已,而不在乎有多少个,数量是不重要的,那指定就是用set来判断有没有了。

算法思路:

18、快乐数

力扣原题

题目简介:

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」 定义为:

  • 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
  • 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
  • 如果这个过程 结果为 1,那么这个数就是快乐数。

如果 n快乐数 就返回 true ;不是,则返回 false

初见思路:

​ 啊我不会呀,我不知道怎么算出各位的平方和。而且我也没想到要用set来检查重复,最没有思路的一集。

算法思路:

class Solution {
public:

    int sum(int n){
        int sum =0;
        while(n){
            sum += (n % 10) *(n % 10);
            n = n/10;
        }
        return sum;
    }
    bool isHappy(int n) {
      
        int temp=n;
        unordered_set<int> setList;
        while(1){
            temp = sum(temp);
            if(temp == 1){
                return true;
            }
            if(setList.find(temp) != setList.end()){
                return false;
            }
            else{
              
                setList.insert(temp);
            }
        }
        return true;

    }
};

19、两数之和

力扣原题

题目简介:

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。

你可以按任意顺序返回答案。

初见思路:

​ 我的想法是,先把数组存起来,然后按照key是本值,然后value是索引的情况。这样子,我每次循环的时候我将target减去元素得到差,我找一下差在不在我的map里,这样我就能够返回他的索引,我就能够输出了。我是天才。

算法思路:

​ 果然还是有问题,我直接把数都存在了map里,但是这样是不行的,因为可能会造成重复,无法去重。

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

};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值