LeeCode||242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

最近准备六级和考试,时间好紧啊啊。。

每道题的方法:

最后总结写

题目一链接:242. 有效的字母异位词 - 力扣(LeetCode)

思路:哈希法中的数组类型:利用小写字母只有26的性质,创建一个大小为26的数组存字符。

代码:

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. 两个数组的交集 - 力扣(LeetCode)

思路:先确定用unordered_set集合,然后其中一个数组转化为unorded_set,然后通过一个for循环和unordered_set的find()函数来寻找相同的元素,存入到另一个unordered_set里面,最后输出

代码:

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        unordered_set<int> result_set;//定义一个存放结果的集合,且方便去重
        unordered_set<int> nums_set(nums1.begin(),nums1.end());//对nums1进行了去重操作

        for(int num:nums2) {
            if(nums_set.find(num) != nums_set.end()) {
                result_set.insert(num);//自动去重
            }
        }

        return vector<int> (result_set.begin(),result_set.end());
    }
};

难点:

补充细节:unordered_set可以自动去重




题目三链接:202. 快乐数 - 力扣(LeetCode)

思路:根据题意得出如果此数不是快乐数,则他会发生无限循环,即某个数重复出现,否则某个数的每一位的平方(用get_sum求)等于1。因此需要快速判断某个元素是否存在在某个集合里时,用哈希法。

代码:

class Solution {
public:
    int get_sum(int n) {
        int res = 0;
        while(n) {
            int i = n % 10;
            n /= 10;
            res += i * i;            
        }
        return res;
    }

    bool isHappy(int n) {
        unordered_set<int> set;

        while(1) {
            int sum = get_sum(n);
            if(sum == 1) return true;
            else {
                if(set.find(sum) != set.end()) {
                    return false;
                }
                else {
                    set.insert(sum);
                }
            }
            n = sum;
        }
    }
};

难点:




题目四链接:1. 两数之和 - 力扣(LeetCode)

思路:此题需要找某个值是否存在在数组中,所以想着用哈希表,又因为需要记录数值和下标,所以需要用map,因为不需要排序,所以需要用unordered_map。然后从第一个数开始便利,找到目标值就return下标,否则把元素存入map.

代码:

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        std::unordered_map <int,int> map;
        for(int i = 0;i < nums.size();i ++) {
            //这里的half也应该是unordered_map类型
            auto half = map.find(target - nums[i]);//需要判断元素是否出现的这个元素,作为key,另一个作为value
            if(half != map.end()) {
                return {half -> second,i};
            }
            else{
                //最后插入
                map.insert(pair<int,int> (nums[i],i));
            }
        }
        return {};
    }
};

难点:

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值