枚举算法
枚举算法的定义与中心思想
枚举算法,又被称为穷举算法,是一种通过搜索所有可能情况来找到问题解决方案的算法。其基本思想是:在进行归纳推理时,如果逐个考察了某类事件的所有可能情况,因而得出一般结论,那么该结论是可靠的。这种算法的核心就是去枚举所有可能的情况。
使用枚举算法需要满足两个条件:首先,问题的解必须在有限个候选答案中;其次,可以通过检查每个候选答案来确定它是否是问题的解。
枚举算法的练习
两数之和
(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
"""