datawhale学习笔记(Leetcode基础算法202312):task01枚举算法

枚举算法

枚举算法的定义与中心思想

枚举算法,又被称为穷举算法,是一种通过搜索所有可能情况来找到问题解决方案的算法。其基本思想是:在进行归纳推理时,如果逐个考察了某类事件的所有可能情况,因而得出一般结论,那么该结论是可靠的。这种算法的核心就是去枚举所有可能的情况。

使用枚举算法需要满足两个条件:首先,问题的解必须在有限个候选答案中;其次,可以通过检查每个候选答案来确定它是否是问题的解。

枚举算法的练习

两数之和

(1)题目内容

给定一个整数数组 nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。可以按任意顺序返回答案。

(2)输入输出示例

示例 1:

输入:nums = [2,7,11,15], target = 9

输出:[0,1]

解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

输入:nums = [3,2,4], target = 6

输出:[1,2]

示例 3:

输入:nums = [3,3], target = 6

输出:[0,1]

(3)解题思路

A.创建一个空字典,用于存储数组中每个元素的下标。

B.遍历数组中的每个元素,对于每个元素,计算目标值减去当前元素的差值。

C.检查差值是否在字典中,如果在字典中,说明找到了两个和为目标值的元素,返回它们的下标。

D.如果差值不在字典中,将当前元素的下标添加到字典中。

E.如果遍历完整个数组都没有找到和为目标值的两个元素,返回一个空列表。

(4)代码实现
class Solution(object):

    def twoSum(self, nums, target):

        index_dict = {}

        for i, num in enumerate(nums):

            diff = target - num

            if diff in index_dict:

                return [index_dict[diff], i]

            index_dict[num] = i

        return []        



        """

        :type nums: List[int]

        :type target: int

        :rtype: List[int]

        """

计数质数

(1)题目内容

给定整数 n ,返回 所有小于非负整数 n 的质数的数量 。

(2)输入输出示例

示例 1:

        输入:nums = [2,7,11,15], target = 9

        输出:[0,1]

        解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

        输入:nums = [3,2,4], target = 6

        输出:[1,2]

示例 3:

        输入:nums = [3,3], target = 6

        输出:[0,1]

(3)解题思路

A.首先,我们需要创建一个函数来判断一个数是否为质数。质数是只有两个正因数(1和它本身)的自然数,且必须大于1。

B.然后,我们遍历从2到n-1的所有整数,对每个整数调用判断质数的函数。

C.如果一个整数是质数,我们就将计数器加1。

D.最后,返回计数器的值。

(4)代码实现
class Solution(object):

    def countPrimes(self, n):

        def is_prime(num):

            if num < 2:

                return False

            for i in range(2, int(num**0.5) + 1):

                if num % i == 0:

                    return False

            return True



        count = 0

        for i in range(2, n):

            if is_prime(i):

                count += 1

        return count

        """

        :type n: int

        :rtype: int

        """
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值