代码随想录算法训练营第三天 | 第454题.四数相加II|Python中的dict和C里面的map相同点和不同点总结

今天是算法训练营的第三天;
写了454. 四数相加 II这道题目
力扣链接
代码随想录链接

代码如下:

class Solution:
    def fourSumCount(self, nums1: List[int], nums2: List[int], nums3: List[int], nums4: List[int]) -> int:
        # 使用字典存储nums1和nums2中的元素及其和
        hashmap = dict()
        for n1 in nums1:
            for n2 in nums2:
                # if n1 + n2 in hashmap:
                #     hashmap[n1+n2] += 1
                # else:
                #     hashmap[n1+n2] = 1
                # 上面的四行代码可以改写为下面的代码,同一个意思
                hashmap[n1+n2] = hashmap.get(n1 + n2, 0) + 1
                 

        # 如果 -(n3 + n4)存在于hashmap,那么就将结果++
        count = 0
        for n3 in nums3:
            for n4 in nums4:
                key1 = -(n3+n4)
                if key1 in hashmap: # 如果hashmap这个字典中的键,和key1相对应的话,那就说明可以相加为0
                    count += hashmap[key1]

        return count

通过Python字典这个数据结构的键值对的形式,来解题。

拓展:
Python中的dict和C里面的map相同点和不同点总结

在Python和C++中,dict和map是用于存储键值对的数据结构,但在语法和实现上存在一些差异。下面是dict和C++中的map的相同点和不同点,并附带示例说明:

相同点:

  1. 存储键值对:dict和map都用于存储键值对,通过键来访问对应的值。

  2. 动态性:它们都支持动态地添加、删除和修改键值对。

不同点:

  1. 语言和语法:dict是Python的内置数据类型,在Python中直接使用,而map是C++标准库中的容器,需要包含相应的头文件和使用命名空间。

  2. 内存管理:Python的dict使用动态内存分配和垃圾回收机制,不需要手动管理内存。而C++中的map使用动态内存分配和自动析构,也可以手动管理内存。

  3. 键和值的类型:Python的dict可以存储各种类型的键和值,包括不同的数据类型和对象。C++中的map通常需要明确指定键和值的类型,可以使用自定义类型作为键和值。

下面两个示例分别展示了使用dict和map存储键值对,并进行一些操作。在Python示例中,我们创建了一个字典person,包含了姓名、年龄和职业等键值对。然后,我们通过访问键来获取对应的值,使用print函数输出结果。接着,我们添加了一个新的键值对、修改了一个值,并删除了一个键值对。最后,使用pprint.pprint函数打印出字典的内容。

在C++示例中,我们使用了std::map容器来存储键值对。我们添加了两个键值对,修改了一个值,并删除了一个键值对。最后,通过for循环遍历map,打印出键值对的内容。

需要注意的是,C++中的示例使用了C++标准库中的map容器,实际使用中还可以使用其他容器,如unordered_map等。这里的示例只是为了演示与Python中dict的比较。

Python中的dict示例:

# 导入模块
import pprint

# 创建字典
person = {
    'name': 'John',
    'age': 30,
    'city': 'New York'
}

# 访问字典中的值
print(person['name'])  # 输出: John

# 添加新的键值对
person['occupation'] = 'Engineer'

# 修改值
person['age'] = 35

# 删除键值对
del person['city']

# 遍历字典
pprint.pprint(person)

C++中的map示例:

#include 
#include 

int main() {
    // 创建map
    std::map<std::string, int> person;

    // 添加键值对
    person["name"] = 30;
    person["age"] = 30;

    // 修改值
    person["age"] = 35;

    // 删除键值对
    person.erase("name");

    // 遍历map
    for (const auto& kv : person) {
        std::cout << kv.first << ": " << kv.second << std::endl;
    }

    return 0;
}```

你可能感兴趣的:(算法,python,c语言)