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

242. 有效的字母异位词

代码:


class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        record = [0] * 26
        for i in range(len(s)):
            record[ord(s[i]) - ord("a")] += 1 #要减去a的asc码才能对应到0-25
        for i in range(len(t)):
            record[ord(t[i]) - ord("a")] -= 1#要减去a的asc码才能对应到0-25
        for i in range(len(record)):
            if record[i] != 0:
                return false False
        return true True #在python中True和False才是标识符

349. 两个数组的交集

思路:首先,确定使用set和数组的区别,当数据很大的时候,数组的下标不能很大,无法使用数组,还有当数据相差很大的时候,使用数组会浪费资源和空间,所以使用map更好,这道题因为限制了数据的大小,所以也可以使用数组

代码:

class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        return list(set(nums1) & set(nums2))
把nums2和nums1变成set,再取交集,最后把得到的交集变成列表输出

202. 快乐数

python解法:

Python:
class Solution:
    def isHappy(self, n: int) -> bool:
        def getSum(num):
            sum = 0
            while(num):
                sum += (num % 10) * (num % 10)#错误:把num写成了n,这里应该是已经更新过的num
                num = num // 10
            return sum
        record = set()
        while True:
            n = getSum(n)
            if (n == 1):
                return True
            else:
                if n in record:
                    return False
                else:
                    record.add(n)

c++解法:

class Solution {
public:
    int getSum(int n) {
        int sum = 0;
        while(n) {
            sum += (n % 10) * (n % 10);
            n /= 10;
        }
        return sum;
    }
    bool isHappy(int n) {
        unordered_set<int> record;
        while(1) {
            n = getSum(n);#在循环里,而不是在循环外,否则就只会算第一次的结果
            if(n == 1) return true;
            else{
                if (record.find(n) != record.end()) return false;
                else record.insert(n);
            }
        }
    }
};

1. 两数之和

python:

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        hashmap = {x:i for i,x in enumerate(nums)}
        for i in range(len(nums)):
            if target - nums[i] in hashmap and i != hashmap[target - nums[i]] :
                return [i,hashmap[target - nums[i]]]



C++:

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++){
            auto iter = map.find(target - nums[i]);
            if(iter != map.end()){
                return {iter -> second, i};#iter -> second的含义见右图
            }
            else{
                map.insert(pair<int, int>(nums[i], i));
            }
        }
        return {};
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值