一、完美偶数计数
问题描述
小C定义了一个“完美偶数”。一个正整数 xx 被认为是完美偶数需要满足以下两个条件:
- xx 是偶数;
- xx 的值在区间 [l,r][l,r] 之间。
现在,小C有一个长度为 nn 的数组 aa,她想知道在这个数组中有多少个完美偶数。
测试样例
样例1:
输入:
n = 5,l = 3,r = 8,a = [1, 2, 6, 8, 7]
输出:2
样例2:
输入:
n = 4,l = 10,r = 20,a = [12, 15, 18, 9]
输出:2
样例3:
输入:
n = 3,l = 1,r = 10,a = [2, 4, 6]
输出:3
解题思路:
问题理解
我们需要在一个数组 a
中找出满足以下两个条件的元素个数:
- 该元素是偶数。
- 该元素在区间
[l, r]
之间。
数据结构选择
由于我们只需要遍历数组并检查每个元素是否满足条件,因此不需要额外的数据结构。直接使用数组即可。
算法步骤
- 遍历数组:我们需要遍历数组
a
中的每一个元素。 - 检查条件:对于每一个元素,检查它是否是偶数,并且是否在区间
[l, r]
之间。 - 计数:如果元素满足上述两个条件,则计数器加一。
- 返回结果:遍历结束后,返回计数器的值。
最终代码:
def is_even_number(a):
return a % 2 == 0
def solution(n, l, r, a):
# 计算在范围 [l, r] 内的偶数个数
return sum(1 for i in a if is_even_number(i) and l <= i <= r)
if __name__ == "__main__":
a1 = [1, 2, 6, 8, 7]
print(solution(5, 3, 8, a1) == 2) # 输出: True
a2 = [12, 15, 18, 9]
print(solution(4, 10, 20, a2) == 2) # 输出: True
a3 = [2, 4, 6]
print(solution(3, 1, 10, a3) == 3) # 输出: True
运行结果:
二、环状 DNA 序列的最小表示法
问题描述
小C正在研究一种环状的 DNA 结构,它由四种碱基
A
、C
、G
、T
构成。这种环状结构的特点是可以从任何位置开始读取序列,因此一个长度为n
的碱基序列可以有n
种不同的表示方式。小C的任务是从这些表示中找到字典序最小的序列,即该序列的“最小表示”。例如:碱基序列
ATCA
从不同位置读取可能的表示有ATCA
,TCAA
,CAAT
,AATC
,其中AATC
是字典序最小的表示。
测试样例
样例1:
输入:
dna_sequence = "ATCA"
输出:'AATC'
样例2:
输入:
dna_sequence = "CGAGTC"
输出:'AGTCCG'
样例3:
输入:
dna_sequence = "TTGAC"
输出:'ACTTG'
解题思路:
问题理解
我们需要找到一个环状 DNA 序列的最小表示法。环状序列意味着可以从任意位置开始读取,因此一个长度为 n
的序列可以有 n
种不同的表示方式。我们的目标是找到这些表示方式中字典序最小的那个。
数据结构选择
我们可以使用一个列表来存储所有可能的表示方式,然后对这些表示方式进行排序,最后返回字典序最小的那个。
算法步骤
-
生成所有可能的表示方式:
- 对于每个起始位置
i
,生成一个新的字符串,该字符串是从位置i
开始,依次读取后续字符,直到回到位置i
为止。 - 将生成的字符串添加到一个列表中。
- 对于每个起始位置
-
排序:
- 对列表中的字符串进行排序,字典序最小的字符串会排在最前面。
-
返回结果:
- 返回排序后的列表中的第一个字符串,即字典序最小的表示方式。
最终代码:
def solution(dna_sequence):
res = []
for i in range(len(dna_sequence)):
s = ""
for j in range(len(dna_sequence)):
s += dna_sequence[(i + j) % len(dna_sequence)]
res.append(s)
res.sort()
return res[0]
# 测试用例
print(solution("ATCA") == "AATC") # 输出: True
print(solution("CGAGTC") == "AGTCCG") # 输出: True
print(solution("TCATGGAGTGCTCCTGGAGGCTGAGTCCATCTCCAGTAG") == "AGGCTGAGTCCATCTCCAGTAGTCATGGAGTGCTCCTGG") # 输出: True
运行结果: